cvCvtColor失败了

时间:2012-07-13 22:20:08

标签: opencv

我尝试根据本网站上的内容运行以下程序 http://www.lirtex.com/robotics/fast-object-tracking-robot-computer-vision/

初始化参数

CvCapture *capture = cvCaptureFromCAM(0);

int width = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH );
int height = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT );

IplImage *frame;

 CvSize size = cvSize(640,480);
cvNamedWindow( "Camera", CV_WINDOW_NORMAL  );
cvNamedWindow( "HSV", CV_WINDOW_NORMAL  );
cvNamedWindow( "EdgeDetection", CV_WINDOW_NORMAL  );

cvResizeWindow("Camera",640,480);
cvResizeWindow("HSV",640,480);
cvResizeWindow("EdgeDetection",640,480);



IplImage *  hsv_frame    = cvCreateImage(size, IPL_DEPTH_8U, 3);
IplImage*  thresholded   = cvCreateImage(size, IPL_DEPTH_8U, 1);

当我像这样调用函数cvCvtColor时:

cvCvtColor(frame, frame  , CV_BGR2HSV);

第二个参数等于第一个参数

但是我正在调用这个函数

cvCvtColor(frame, hsv_frame  , CV_BGR2HSV);

失败并抛出异常

有没有人知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

Array frame 是捕获图像的大小,而* hsv_frame *已经硬编码为640x480。颜色空间转换操作(cvCvtColor)要求源和目标都具有相同的大小,因此异常。

解决方案:

一个。通过设置

使用与输入相同的大小

CvSize size = cvSize(frame->width, frame->height);

-OR -

湾如果您希望最终的o / p为640x480,请使用以下命令将输入​​调整为所需大小:cvResize

最后要注意的是:与C接口相比,C ++接口更直观,更稳定,并增加了功能。我建议你转到OpenCV的C ++界面