0

我尝试根据本网站 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);

它失败并引发异常

有谁知道为什么会这样?

4

1 回答 1

1

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

解决方案:

一种。通过设置使用与输入相同的大小

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

-或者-

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

最后一点:与 C 接口相比,C++ 接口更直观、更稳定,并且增加了一些特性。我建议转移到 OpenCV 的 C++ 接口

于 2012-07-14T07:00:35.733 回答