줘이리의 인생적기

CV - opencv(C++) imread, imshow, waitkey, empty 본문

공부/Computer Vision(C++)

CV - opencv(C++) imread, imshow, waitkey, empty

줘이리 2020. 11. 26. 23:06
728x90

opencv에 대해 꾸준히 포스팅을 해보려고 합니다.

(visual studio community 2019, opencv 4.1.0 버전을 이용합니다.)

 

opencv를 공부하시는 분들이라면 다 아는 아주 유명한 사진이죠!

 

이 사진을 새로운 창에 새로운 이름으로 불러오기를 해봅시다.

 

lenna.bmp

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace std;
using namespace cv;

int main(void) {

	Mat image;
	image = imread("lenna.bmp");

	if (image.empty()) {
		cerr << "Image load error" << endl;
		return -1;
	}

	imshow("lenna image", image);

	waitKey();
	return 0;
}

결과

imshow를 이용하여 창의 이름을 넣어주고 이미지를 불러왔습니다.

원하는 결과가 나왔죠?

 

폴더에 lenna파일이 없다면 Image load error 예외처리가 될 겁니다. 

못 불러올 상황을 대비하여 써주면 좋은 if문입니다.

 

 

----------------------------------------------------------------------------------------------------

 

imread의 flag를 가지고 더 놀아볼까요!

파일명 다음의 flag와 결과를 집중해서 봐주세요

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace std;
using namespace cv;

int main(void) {
	Mat image;
	image = imread("lenna.bmp");
	imshow("lenna default", image);
	waitKey();

	image = imread("lenna.bmp", IMREAD_UNCHANGED);
	imshow("lenna UMCHANGED", image);
	waitKey();

	image = imread("lenna.bmp", IMREAD_GRAYSCALE);
	imshow("lenna GRAYSCALE", image);
	waitKey();

	image = imread("lenna.bmp", IMREAD_REDUCED_GRAYSCALE_2);
	imshow("lenna GRAYSCALE/2", image);
	waitKey();

	image = imread("lenna.bmp", IMREAD_REDUCED_COLOR_2);
	imshow("lenna COLOR/2", image);
	waitKey();

	image = imread("lenna.bmp", IMREAD_REDUCED_COLOR_4);
	imshow("lenna COLOR/4", image);

	waitKey();

	return 0;
}

 

어떤가요? 이러한 flag들로 흑백과 컬러, 배율을 쉽게 변경할 수 있습니다.

 

----------------------------------------------------------------------------------------------------

 

사용했던 함수들을 정리해 볼까요?

 

Mat imread(const String& filename, int flags);
영상을 불러오며 옵션 flag들로 다양하게 불러올 수 있습니다.

bool Mat::empty() const
행렬 멤버 변수가 0이거나, data 멤버 변수가 NULL이면 true를 반환합니다.

void imshow(const String& windowname, InputArray mat)
mat 인자로 전달된 영상 데이터를 출력합니다.

int waitKey(int delay = 0);
키 입력을 기다릴 시간을 정합니다. delay가 0보다 작다면 무한히 기다립니다.
반환값은 지정시간동안 키가 눌리지 않았다면 -1을 반환합니다.

 

다음은 클래스로 찾아뵙겠습니다!

 

 

----------------------------------------------------------------------------------------------------

참고 자료 : github.com/sunkyoo/opencv4cvml