我試圖通過網絡攝像頭同時檢測不同的顏色。下面是我的代碼,但我得到一個錯誤:錯誤:錯誤的參數<數組應該是CvMat或IplImage>
ERROR: Bad argument < Array should be CvMat or IplImage> in unknown function.
與走來:
Unhandled exception at 0x7c812fd: cv:: Exception at memory location 0x0011fb70
我想,也許通過
IplImage* imgHSV = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 3);
引起的,但錯誤我不知道和有想法如何解決它。有人可以給我一些提示嗎?
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
// from here to main function is my part.
IplImage* GetThresholdedImage(IplImage* imgHSV, CvScalar lower, CvScalar upper)
{
IplImage* imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1);
cvInRangeS(imgHSV, lower, upper, imgThresh);
return imgThresh;
}
IplImage* hsv;
CvScalar blue_lower = cvScalar(110,60,10);
CvScalar blue_upper = cvScalar(120,256,256);
CvScalar green_lower = cvScalar(40,60,10);
CvScalar green_upper = cvScalar(71,256,256);
/* Get the images thresholded for blue and green. */
IplImage* blue_mask = GetThresholdedImage(hsv, blue_lower, blue_upper);
IplImage* green_mask = GetThresholdedImage(hsv, green_lower, green_upper);
int main(){
CvCapture* capture =0;
capture = cvCaptureFromCAM(0);
if(!capture){
printf("Capture failure\n");
return -1;
}
IplImage* frame=0;
cvNamedWindow("Video");
cvNamedWindow("Ball");
while(true){
frame = cvQueryFrame(capture);
if(!frame) break;
frame=cvCloneImage(frame);
cvSmooth(frame, frame, CV_GAUSSIAN,3,3);
IplImage* imgHSV = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 3);
cvCvtColor(frame, imgHSV, CV_BGR2HSV);
IplImage* imgThresh = GetThresholdedImage(imgHSV, blue_lower, blue_upper);
IplImage* imgThresh2 = GetThresholdedImage(imgHSV, green_lower, green_upper);
cvSmooth(imgThresh, imgThresh, CV_GAUSSIAN,3,3);
cvSmooth(imgThresh2, imgThresh2, CV_GAUSSIAN,3,3);
cvShowImage("Ball", imgThresh);
cvShowImage("Ball2", imgThresh2);
cvShowImage("Video", frame);
cvReleaseImage(&imgHSV);
cvReleaseImage(&imgThresh);
cvReleaseImage(&imgThresh2);
cvReleaseImage(&frame);
int c = cvWaitKey(10);
if((char)c==27) break;
}
cvDestroyAllWindows() ;
cvReleaseCapture(&capture);
return 0;
}
一個問題,爲什麼你有行'frame = cvCloneImage(frame);'? – alrikai
@alrikai'frame'是[不允許](http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=cvqueryframe#IplImage*%20cvQueryFrame%28CvCapture*%20capture%29)除非它被首先克隆。 – Aurelius
考慮到你[另一篇文章](http://stackoverflow.com/q/17517921/1601291),你可能想考慮學習C稍微好一點,然後再[複製粘貼代碼](http://stackoverflow.com/a/17478700/1601291)willy-nilly。您可以在[本頁]底部找到一些好書(http://stackoverflow.com/tags/c/info)。我的意思是說沒有任何冒犯 - 但在解決像copmuter視覺這樣更爲棘手的問題之前,掌握好語言是很重要的。 – Aurelius