ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정지 영상 출력
    Programming/OpenCV 2015. 3. 21. 14:27


    영상 파일을 불러와서 화면에 출력하는 프로그램

    #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");
    }
    

    프로그램 컴파일 후 명령행 인자로 영상 파일의 이름을 입력하고 실행하면

    해당 영상을 불러와서 화면을 보여준다.

    사용자가 아무 키나 누르면 창이 닫히고 프로그램이 종료된다.




    IplImage* img = cvLoadImage( argv[1] );
    
    • 위 문장은 영상을 불러오는 작업
    • 함수 cvLoadImage()는 파일의 이름을 검사하여 파일 형식을 자동으로 판단
    • 영상을 불러올 때 필요한 메모리 공간은 함수 내부에서 자동으로 할당
    • cvLoadImage() 함수는 BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS, TIFF 등의 영상 포맷을 읽어올 수 있음
    • 불러온 영상 데이터 구조체의 포인터를 반환
    • 이 영상 구조체 이름은 IplImage이며, OpenCV는 단일 채널, 다중 채널, 정수형, 실수형 등 모든 형태의 영상 데이터를
    • IplImage 구조체 하나로 표현 가능



     cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE );
    
    • 영상을 표시할 윈도우를 하나 만드는 일을 한다.
    • HighGUI 라이브러리에서 제공
    • 첫 번째 인자로 넘어오는 문자열(Example1)은 윈도우의 이름으로 등록, 해당 윈도우 상단(타이틀 바)에 표시
    • HighGUI 라이브러리 함수들은 윈도우 이름을 이용해 윈도우를 구분하고 동작을 제어
    • 두 번째 인자에는 윈도우 속성을 지정, 0(기본값) 또는 CV_WINDOW_AUTOSIZE가 들어갈 수 있음
    • 0이 지정될 시 불러오는 영상의 크기에 상관없이 윈도우 크기는 일정하게 고정, 대신 영상이 윈도우의 크기에 맞게 확대 또는 축소되어 나타남
    • 값이 CV_WINDOW_AUTOSIZE이면 불러오는 영ㅇ상의 실제 크기에 맞게 윈도우의 크기가 자동으로 조절




     cvShowImage("Example1", img );
    
    • 해당 영상을 윈도우에 출력한다.
    • cvNamedWindow() 함수에 의해 지정된 윈도우의 이름을 첫 번째 인자로 받는다.
    • 해당 윈도우가 CV_WINDOW_AUTOSIZE 속성으로 생성되었다면 윈도우 크기를 영상 크기에 맞게 변화시킨다.




    cvWaitKey(0);
    
    • 프로그램의 동작을 잠시 멈추고 사용자로부터 키 입력을 기다린다.
    • 양의 정수가 전달되면 프로그램은 밀리초(millisecond) 단위로 지정한 시간만큼 대기하였다가 동작을 재개
    • 인자값이 0 또는 음수가 전달되면 프로그램은 키가 눌려질 때까지 무한정 기다림




     cvReleaseImage( &img );
    
    • 영상을 사용한 후에는 반드시 할당된 메모리 공간을 해제해야 한다.
    • 이를 위해 IplImage*의 주소값을 cvReleaseImage 함수에 넘겨주어야 한다.
    • 이 함수 실행 후 img는 NULL로 설정된다.




    cvDestroyWindow("Example1");
    
    • 윈도우를 닫고, 윈도우 동작을 위해 동적 할당된 메모리 공간(*img 영상의 필셀 정보 복사본을 저장하는 윈도우 내부 버퍼)을 모두 해제
    • 간단한 프로그램의 경우 할당된 모든 리소스들이 자동으로 반환되지만 함수를 직접 호출해 반환하는 것이 바람직

    도스창 또는 명령프롬프트를 실행해 exe파일명 영상파일 형태로 명령을 입력하면
    Example1이라는 제목의 창이 하나 나타나는 것을 확인할 수 있다.


    'Programming > OpenCV' 카테고리의 다른 글

    cvSplit, cvMerge, cvFlip  (0) 2015.04.14
    IplImage 구조체  (0) 2015.04.12
    CvMat 행렬 구조체  (0) 2015.03.27
    기본 데이터 타입  (0) 2015.03.27
    동영상 재생  (0) 2015.03.27

    댓글

Designed by Tistory.