본문 바로가기
코딩/OpenCV

[C++ opencv] 이미지 불러오고 보여주는 방법, imread() imshow()

by DIYver 2020. 6. 16.

본문 목표

OpenCV에서 이미지를 읽고 화면에 보여주는 기능을 담당하는 imread() imshow() 함수에 대해서 알아본다.

 

키워드 :  imread( ), imshow( )

 

 

 

 

 

알아볼 함수 원형

- 이미지 읽기 & 불러오기 ( Image Read, imread() )

using namespace cv;
using namespace std;

...

Mat img = imread("Lenna.png", 1);

 

imread( "fileName", flag) : fileName 에는 불러오고자 하는 이미지의 경로를 입력하고, flag는 불러오는 옵션을 입력한다.

 

 

불러오고자 하는 이미지가 프로젝트 폴더 안에 있다면 fileName 에 파일 이름을 입력하면 된다.

 

위와 같이 "Lenna.png" 라고 입력하면 된다.

 

만약 다른 폴더에 있다면 그 경로를 다 입력하면 된다.

 

문제는 폴더 이름이 한글로 되어있다면 제대로 인식 못 할 수 있다.

 

바탕화면에 저장된 이름을 불러오고 싶다면 아래와 같이 입력해야 한다.

 

"C:\\Users\\<username>\\Desktop\\Lenna.png"

 

<username>은 사용자마다 다르므로 직접 확인하여 입력해야한다.

 

폴더 표시할 때, \를 한 개가 아닌 두 개를 입력해야 폴더로 인식한다는 것에 주의하자!

 

 

flag 는 대표적으로 3가지가 있다. 내용을 나타내게 적어도 되고, 숫자를 사용해도 된다.

 

'IMREAD_COLOR' or '1' : 이미지 파일을 색정보(Color)를 포함해서 불러온다. Default 설정이라서 생략이 가능하다.

 

'IMREAD_GRAYSCALE' or '0' : 이미지 파일을 흑백(Grayscale)으로 변환해서 불러온다.

 

'IMREAD_UNCHANGED' or '-1' : 이미지 파일을 색정보에 알파채널(Alpha channel)까지 포함해서 불러온다.

 

 

이외에도 많다. color 와 graysclae 로 불러오면서 크기만 줄일 수 있다.

 

 

- 이미지 보여주기 ( Image Show,  imshow )

...
imshow("img", img);
waitKey(0);
...

 

imshow( "windowName", image) : windowName 에는 이미지를 보여줄 윈도우 창의 이름을 입력하고,

 

image 에는 보여주고자 하는 <Mat> 형식의 image 변수 이름을 입력한다.

 

 

waitKey(delay time) : delay time에는 키입력을 기다릴 시간을 입력한다.

 

delay time 만큼 해당 코드 부분에서 코드가 멈추며, 키입력이 감지되면 다음 코드로 진행한다.

 

0을 입력하면 무한정 키 입력을 기다리게 된다.

 

imshow( ) 함수를 사용하게 되면, 거의 waitKey( ) 함수가 필수적으로 따라와야 한다.

 

waitKey( ) 함수를 사용하지 않으면 이미지가 노출되자마자 코드가 끝나기 때문이다.

 

 

 

 

 

 

코드 테스트 결과

- CODE

#include <opencv2/highgui.hpp>

using namespace cv;
using namespace std;

int main(int ac, char** av) {

	Mat color_img = imread("Lenna.png",IMREAD_COLOR);
	Mat grayscale_img = imread("Lenna.png", IMREAD_GRAYSCALE);
	Mat unchanged_img = imread("Lenna.png", IMREAD_UNCHANGED);
	Mat reduced_img = imread("Lenna.png", IMREAD_REDUCED_COLOR_2);
	Mat reduced_grayscale_img = imread("Lenna.png", IMREAD_REDUCED_GRAYSCALE_4);

	imshow("color_img", color_img);
	imshow("grayscale_img", grayscale_img);
	imshow("unchanged_img", unchanged_img);
	imshow("reduced_img", reduced_img);
	imshow("reduced_grayscale_img", reduced_grayscale_img);
	waitKey(0);

	return 0;
}

 

- RESULT

코드에 적혀있는 imshow( ) 의 창이름과 해당 사진들을 유심히 관찰해보길 바란다.

 

reduced 옵션을 적용한 사진들은 크기가 작아진 것을 볼 수 있다.

 

 

나중에 다루겠지만, 색채널 변환에 있어서 cvtColor( ) 함수를 이용할 경우가 많은데,

 

귀찮게 여러번 할 필요 없이 imread( ) 함수로 이미지를 불러오면서 색채널과 이미지 크기를 바꿀 수 있음을 알아가는 것이 제일 중요하다.

 

 

 

 

 

 

도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!

감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^

댓글