'OpenCV'에 해당되는 글 5건

  1. 2013.01.03 OpenCV 정지영상, 동영살 출력하기 1

정지영상 출력

 #include "highgui.h"

 

int main(int argc, char **argv) {

 

        IplImage* img=cvLoadImage(argv[1]);

        cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);

        cvShowImage("Example1", img);

        cvWaitKey(0);

 

        cvReleaseImage(&img);

        cvDestroyWindow("Example1");

 

        return 0;

}


- 실행결과 -



cvLoadImage()는 파일의 이름을 검사하여 파을의 형식을 자동으로 판단한다. 영상을 불러올때 필요한 메모리 공간은 함수내에서 자동으로 할당된다.  cvLoadImage()함수는 BMP, DIB, JPEG, JPE, PNG, PBN, PGM, PPM, RAS, TIFF등의 영ㅇ상 포멧을 읽어올수 있다. 이 함수를 불러온 영상데이터 구조체의 포인터를 반환한다. 이 영상 구조체의 이름은 IpImage이다.


cvNamedWindow()는 영상을 표시할 윈도우를 만드는 일을 한다. HighGUI라이브러리에 제공된다. 함수의 첫번째인자는 윈도우의 이름이 등록되며 두번째 인자는 윈도우의 속성을 지정한다.


cvShowImage() 함수를 호출하여 해당 영상을 윈도우에 출력할 수 있다.


cvWaitKey()함수를 프로그램의 동장을 잠시 멈추고 사용자로부터 키 입력을 기다린다. 양의 정수가 전달되면 프로그램은 밀리초 단위로 지정한 시간만큼 대기하였다가 동작을 재개 한다.


cvReleaseImage() : 프로그램에서 영상을 사용한 후에는 반드시 해당된 메모리 공간을 해제해야한다. 이를 위해서는 IpImage*의 주소값을 함수에 넘겨준다.


cvDestroyWindow() 함수는 윈도우 자체를 없앤다. 

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



AVI동영상 출력

 #include "highgui.h"

 

int main(int argc, char **argv) {

 

        cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);

        CvCapture* capture=cvCreateFileCapture(argv[1]);

        IplImage* frame;

        char c;

 

        while(1) {  //매 프레임마다 프레임을 받아오기위해 While문을 사용

               frame=cvQueryFrame(capture);

               if(!frame) break;

               cvShowImage("Example2", frame);

 

               c=cvWaitKey(33);

               if(c==27)      break;

        }

 

        cvReleaseCapture(&capture);

        cvDestroyWindow("Example2");

 

        return 0;

}


- 실행결과 -

 동영상이 출력된다.


CvCapture구조체는 AVI파일 자체에 관한 정보와 재생위치에 관한 정보를 담고있다. CvCapture구조체 변수는 CvCreateFileCapture()함수를 이용하여 해당경로에있는 AVI파일에 대한 정보로 초기화를 해준다.


cvQueryFrame()함수는 CvCapture구조체의 포인터를 인자로 받고, 열려있는 동양상의 다음 프레임을 메모리 공간으로 복사하고, 그 메모리의 주소를 반환한다.


cvWaitKey()함수를 이용하여 33ms동안 프로그램을 정지한다. 그사이에 사용자가 키보드의 특정키를 누르면 해당의 키의 아스키코드가 변수c에 저장하게 되는데 이를 이용하여 ESC키가 눌려지게 되면 루프를 벗어나 프로그램이 종료된다.



Posted by No names
,