我尝试根据本网站上的内容运行以下程序 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);
失败并抛出异常
有没有人知道为什么会这样?
答案 0 :(得分:1)
Array frame 是捕获图像的大小,而* hsv_frame *已经硬编码为640x480。颜色空间转换操作(cvCvtColor)要求源和目标都具有相同的大小,因此异常。
解决方案:
一个。通过设置
使用与输入相同的大小 CvSize size = cvSize(frame->width, frame->height);
-OR -
湾如果您希望最终的o / p为640x480,请使用以下命令将输入调整为所需大小:cvResize
最后要注意的是:与C接口相比,C ++接口更直观,更稳定,并增加了功能。我建议你转到OpenCV的C ++界面