**보통 하나의 입력 영상에 대해 여러 가지 변환 연산을 수행하여 여러 개의 결과 영상을 각각 생성하는 것이 일반적이다.
이때, 결과 영상을 저장할 변수 생성 및 메모리 공간 할당, 실제 변환 연산을 동시에 수행하는 포장함수(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)
수정아직 못함.. 중단점이 어쩌고 하는데 무슨 말인지..
'공부해요 > OpenCV' 카테고리의 다른 글
차 번호판인식소스 (0) | 2015.02.17 |
---|---|
[ openCV 제대로 배우기 ] ex2-6.exe - 캐니 엣지 검출기 (0) | 2014.07.28 |
[ openCV 제대로 배우기 ] ex2-4.exe - 간단한 변환 (0) | 2014.07.28 |
[ openCV 제대로 배우기 ] ex2-3.exe - 간단한 사용자 인터페이스 추가 (0) | 2014.07.28 |
[ openCV 제대로 배우기 ] ex2-2.exe - AVI동영상 재생 (0) | 2014.07.28 |