我是OpenCV的新手。我在Windows 8中使用Visual Studio 2010终极版与opencv2.4.8库。 我需要一个项目的对象检测算法,所以我试着理解这个代码是如何工作的:
#include <opencv\cv.h>
#include <opencv\highgui.h>
//This function threshold the HSV image and create a binary image
IplImage* GetThresholdedImage(IplImage* imgHSV){
IplImage* imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1);
cvInRangeS(imgHSV, cvScalar(170,160,60), cvScalar(180,256,256), imgThresh);
return imgThresh;
}
int main(){
CvCapture* capture =0;
IplImage* frame=0;
capture = cvCaptureFromCAM(0);
capture = cvCaptureFromCAM(0);
if(!capture){
printf("Capture failure\n");
return -1;
}
cvNamedWindow("Video",1);
cvNamedWindow("Ball",1);
//iterate through each frames of the video
while(true){
frame = cvQueryFrame(capture);
if(!frame) break;
frame=cvCloneImage(frame);
cvSmooth(frame, frame, CV_GAUSSIAN,3,3);//smooth the image using Gaussian
IplImage* imgHSV = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 3);
cvCvtColor(frame, imgHSV, CV_BGR2HSV); //Change the color format from BGRtoHSV
IplImage* imgThresh = GetThresholdedImage(imgHSV);
cvSmooth(imgThresh, imgThresh, CV_GAUSSIAN,3,3); //smooth the binary image
cvShowImage("Ball", imgThresh);
cvShowImage("Video", frame);
//Clean up used images
cvReleaseImage(&imgHSV);
cvReleaseImage(&imgThresh);
cvReleaseImage(&frame);
//Wait 50mS
int c = cvWaitKey(10);
//If 'ESC' is pressed, break the loop
if((char)c==27 ) break;
}
cvDestroyAllWindows();
cvReleaseCapture(&capture);
return 0;
}
这是来自http://opencv-srf.blogspot.in/2010/09/object-detection-using-color-seperation.html的代码 我尝试解决这些错误,但无法摆脱这些:
我不知道while循环或cvNamedWindow有什么问题。请帮忙。
答案 0 :(得分:1)
首先,您说出copy
其他代码,但我看到的是not copy
。例如,在原始代码中(来自您提供的链接),它是
capture = cvCaptureFromCAM(0);
,但在您的代码中,它变为
capture = cvCaptureFromCAM(0);
capture = cvCaptureFromCAM(0);
当您尝试从同一相机设备多次读取时,这可能会导致错误。
此外,正如其他人评论的那样,当您从网站复制并粘贴代码时,可能会出现非打印,实际上不可见的字符,这会使VS或编译器感到困惑。
首先尝试解决此类问题,看看它是如何发生的。
答案 1 :(得分:0)