OpenCV의 HighGUI라이브러리에는 다양한 포맷의 영상 파일을 불러올 수 있는 기능이 정의되어 있다.

HighGUI 라이브러리를 이용하여 영상을 불러와서 화면에 출력하는 예제이다.

#include <opencv\highgui.h>

int main() {
	IplImage *image = cvLoadImage("lena.jpg");

	cvNamedWindow("Test",1);
	cvShowImage("Test",image);
	cvWaitKey(0);

	cvReleaseImage(&image);
	cvDestroyWindow("Test");

	return 0;
}

cvLoadImage()는 영상 데이터의 구조체 포인터를 반환한다. 인자 값으로 파일명과 형식을 넣어준다.

구조체의 이름은 IplImage이며, 단일 채널, 다중 채널, 정수형, 실수형 등 모든 형태의 영상 데이터를 IplImage로 표현할 수 있다. 또한 BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS, TIFF 등의 영상 포맷을 지원한다.

*출력할 영상은 프로젝트 폴더내에 존재하여야 한다.


cvNamedWindow()는 영상을 표시할 윈도우를 하나 만드는 일을 한다.

첫 번째 인자는 윈도우의 이름으로 등록된다.

두 번째 인자는 윈도우의 속성을 지정한다. 여기에는 0(기본값) 또는 1이 들어갈 수가 있다.

인자값이 0으로 지정되면 불러오는 영상의 크기에 상관없이 윈도우 크기는 일정하게 고정이 되고, 영상이 윈도우의 크기에 맞게 확대 또는 축소되어 나타난다. 만약 1(CV_WINDOW_AUTOSIZE)이면 불러오는 영상의 실제 크기에 맞게 윈도우의 크기가 자동으로 조절된다.


cvShowImage()함수는 IplImage* 타입으로 생성된 영상을 해당 제목을 갖은 윈도우에 영상을 출력한다.

첫번째 인자는 윈도우의 이름이고, 두번째 인자는 IplImage이다.


cvWaitKey()함수는 프로그램의 동작을 잠시 멈추고 사용자로부터 키 입력을 기다린다.

양의 정수일 경우 밀리초(millisecond) 단위로 지정한 시간동안 대기한다.

인자값이 0이나 음수일 경우 키가 눌려질 때 까지 무한정 기다린다.


cvReleaseImage()함수는 할당된 메모리 공간을 해제한다. 

인자로 IplImage*의 주소값을 전달해준다. 이 함수가 실행된 후 해당 IplImage는 NULL로 설정된다.


cvDestroyWindow()함수는 윈도우를 닫고, 윈도우를 위해 동적할당된 메모리 공간을 모두 해제한다. 

cvDestroyAllWindows()함수를 이용하여 한번에 모든 창을 닫을 수도 있다.


간단한 프로그램의 경우 프로그램이 종료할 때 운영체제에 의해 할당된 모든 리소스들이 자동으로 반환되지만 cvReleaseImage()함수와 cvDestroyWindow()함수를 직접 호출하여 리소스를 반환하는것이 좋다.





이미지 파일을 출력하는 또 다른 방법이 있다. 다음과 같이 소스를 작성했을 경우 명령프롬프트 창을 이용하여 실행해야한다.

#include <opencv\highgui.h>

int main(int argc, char** argv) {
	IplImage *image = cvLoadImage( argv[1] );

	cvNamedWindow("Test",1);
	cvShowImage("Test",image);
	cvWaitKey(0);

	cvReleaseImage(&image);
	cvDestroyWindow("Test");

	return 0;
}

main함수에 인자가 있는 경우인데, 코드를 작성한뒤 디버깅을 해야 코드가 적용된다. 코드 작성후 디버깅을 한뒤 명령프롬프트 창에서 명령어를 입력해준다.

이때 출력할 영상파일이 같은 폴더에 존재하여야 한다. 


프로젝트폴더\Debug>프로젝트이름.exe 이미지파일.파일형식



다음과 같이 입력하면 영상이 출력되는 모습을 볼 수 있다.


[영상처리] 동영상파일(AVI) 출력


[영상처리] 카메라(웹캠)영상 출력

+ Recent posts