공부해요/OpenCV

[ openCV 제대로 배우기 ] ex2-5.exe - cvPyrDown()함수를 사용하여 입력 영상의 가로,세로 크기 반으로 줄이기기

예쁜꽃이피었으면 2014. 7. 28. 09:44

**보통 하나의 입력 영상에 대해 여러 가지 변환 연산을 수행하여 여러 개의 결과 영상을 각각 생성하는 것이 일반적이다.

이때, 결과 영상을 저장할 변수 생성 및 메모리 공간 할당, 실제 변환 연산을 동시에 수행하는 포장함수(wrapper function)을 만들어 사용하면 편리하다.





# include <opencv\cv.h> 

# include <opencv\highgui.h> 


IplImage* doPyrDown(

  IplImage* in,

  int       filter = IPL_GAUSSIAN_5x5)

{


    // Best to make sure input image is divisible by two.

    //

assert(in->width%2 == 0 && in->height%2 == 0);

    IplImage* out = cvCreateImage( 

        cvSize( in->width/2, in->height/2 ),

        in->depth,

        in->nChannels

    );

    cvPyrDown( in, out );

    return( out );

};


int main( int argc, char** argv )

{

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

IplImage* img = cvLoadImage( "c:/opencv/build/doc/opencv-logo.png");

  IplImage* img2 = cvCreateImage( cvSize( img->width/2,img->height/2 ), img->depth, img->nChannels);

  cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE );

  cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE );

  cvShowImage("Example1", img );

  img2 = doPyrDown( img );

  cvShowImage("Example2", img2 );

  cvWaitKey(0);

  cvReleaseImage( &img );

  cvReleaseImage( &img2 );

  cvDestroyWindow("Example1");

  cvDestroyWindow("Example2");

}



위의 소스를 실행하면 이런 에러가 난다.

Assertion failed: in->width%2 == 0 && in->height%2 == 0



*** ASSERT 문이란, 디버그 모드에서 주어진 조건이 만족하지 않으면 강제로 프로그램을 종료시키는 '안전장치' 함수입니다. 정상적인 값이 아닌데 그냥 계속 실행되다가 도저히 알수없는 어딘가에서 죽는 것보다는, 처음부터 잘못된 값이 들어왔을 때 인지를 한순간 바로 종료시켜 버린다면 문제를 찾기가 훨씬 쉽겠지요.

(http://social.msdn.microsoft.com/Forums/ko-KR/c721227b-c9ef-4c1e-b8f1-7359a18ee94a/-?forum=visualcplusko)




수정아직 못함.. 중단점이 어쩌고 하는데 무슨 말인지..


반응형