C++ 关于识别不同颜色的错误 #包括“stdafx.h” #包括 #包括 /*IplImage*GetThresholdeImage(IplImage*imgHSV){ IplImage*imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U,1); cvInRangeS(imgHSV、cvScalar(170160,60)、cvScalar(180256256)、imgThresh); 返回imgThresh; } */ IplImage*GetThresholdeImage(IplImage*imgHSV、CvScalar lower、CvScalar upper) { IplImage*imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U,1); cvInRangeS(imgHSV、下部、上部、imgThresh); 返回imgThresh; } IplImage*hsv; CvScalar blue_upper=CvScalar(120256256); CvScalar green_lower=CvScalar(40,60,10); CvScalar green_upper=CvScalar(71256256); IplImage*blue\u mask=GetThresholdeImage(hsv、blue\u lower、blue\u upper); IplImage*绿色遮罩=获取阈值尺寸(hsv、绿色下、绿色上); int main(){ CvCapture*capture=0; 捕获=cvCaptureFromCAM(0); 如果(!捕获){ printf(“捕获失败\n”); 返回-1; } IplImage*frame=0; cvNamedWindow(“视频”); CVD(“球”); while(true){ 帧=cvQueryFrame(捕获); 如果(!帧)中断; frame=cvCloneImage(frame); cvSmooth(帧,帧,CV_高斯,3,3); IplImage*imgHSV=cvCreateImage(cvGetSize(帧),IPL_DEPTH_8U,3); CVT颜色(框架、imgHSV、CV_BGR2HSV); IplImage*imgThresh=getthresholdemage(imgHSV); cvSmooth(imgThresh,imgThresh,CV_-GAUSSIAN,3,3); cvShowImage(“球”,imgThresh); cvShowImage(“视频”,帧); cvReleaseImage(&imgHSV); cvReleaseImage(&imgThresh); cvReleaseImage(&frame); int c=cvWaitKey(10); 如果((char)c==27)中断; } cvallwindows(); cvReleaseCapture(&capture); 返回0; }

C++ 关于识别不同颜色的错误 #包括“stdafx.h” #包括 #包括 /*IplImage*GetThresholdeImage(IplImage*imgHSV){ IplImage*imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U,1); cvInRangeS(imgHSV、cvScalar(170160,60)、cvScalar(180256256)、imgThresh); 返回imgThresh; } */ IplImage*GetThresholdeImage(IplImage*imgHSV、CvScalar lower、CvScalar upper) { IplImage*imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U,1); cvInRangeS(imgHSV、下部、上部、imgThresh); 返回imgThresh; } IplImage*hsv; CvScalar blue_upper=CvScalar(120256256); CvScalar green_lower=CvScalar(40,60,10); CvScalar green_upper=CvScalar(71256256); IplImage*blue\u mask=GetThresholdeImage(hsv、blue\u lower、blue\u upper); IplImage*绿色遮罩=获取阈值尺寸(hsv、绿色下、绿色上); int main(){ CvCapture*capture=0; 捕获=cvCaptureFromCAM(0); 如果(!捕获){ printf(“捕获失败\n”); 返回-1; } IplImage*frame=0; cvNamedWindow(“视频”); CVD(“球”); while(true){ 帧=cvQueryFrame(捕获); 如果(!帧)中断; frame=cvCloneImage(frame); cvSmooth(帧,帧,CV_高斯,3,3); IplImage*imgHSV=cvCreateImage(cvGetSize(帧),IPL_DEPTH_8U,3); CVT颜色(框架、imgHSV、CV_BGR2HSV); IplImage*imgThresh=getthresholdemage(imgHSV); cvSmooth(imgThresh,imgThresh,CV_-GAUSSIAN,3,3); cvShowImage(“球”,imgThresh); cvShowImage(“视频”,帧); cvReleaseImage(&imgHSV); cvReleaseImage(&imgThresh); cvReleaseImage(&frame); int c=cvWaitKey(10); 如果((char)c==27)中断; } cvallwindows(); cvReleaseCapture(&capture); 返回0; },c++,opencv,C++,Opencv,上面是我的代码,用来区分不同的颜色,但是主函数出现了一些问题。基本上,主要功能只是激活cam。错误是:“GetThresholdeImage不接受1个参数”。有人能给我一些提示吗?电话线 #include "stdafx.h" #include <cv.h> #include <highgui.h> /*IplImage* GetThresholdedImage(IplImage* imgHSV){ IplImage* imgThres

上面是我的代码,用来区分不同的颜色,但是主函数出现了一些问题。基本上,主要功能只是激活cam。错误是:“GetThresholdeImage不接受1个参数”。有人能给我一些提示吗?

电话线

#include "stdafx.h"

#include <cv.h>
#include <highgui.h>


/*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;
} */
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_upper = cvScalar(120,256,256);
CvScalar green_lower = cvScalar(40,60,10);
CvScalar green_upper = cvScalar(71,256,256);

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);

            cvSmooth(imgThresh, imgThresh, CV_GAUSSIAN,3,3);

            cvShowImage("Ball", imgThresh);            
            cvShowImage("Video", frame);


            cvReleaseImage(&imgHSV);
            cvReleaseImage(&imgThresh);            
            cvReleaseImage(&frame);


            int c = cvWaitKey(10);
            if((char)c==27 ) break;      
      }

      cvDestroyAllWindows() ;
      cvReleaseCapture(&capture);     

      return 0;
}
是什么导致了错误。函数的接口

IplImage* imgThresh = GetThresholdedImage(imgHSV);
具有三个参数,如中所用

GetThresholdedImage
您必须添加其他两个参数,例如:

IplImage* blue_mask = GetThresholdedImage(hsv, blue_lower, blue_upper);
IplImage* green_mask = GetThresholdedImage(hsv, green_lower, green_upper);

取决于您要对图像执行的操作。

IplImage*imgThresh=getthresholdemage(imgHSV)
仅使用1个参数调用
GetThresholdeImage
。带有1个参数的方法被注释掉。通过其他2个婴儿车或删除评论。我添加了蓝色较低,蓝色较高,它可以重建,仍然无法调试。错误:0x7C812FD3未处理异常:微软C++异常:CV::内存位置0x011FB70异常。代码似乎正确,但您可能需要添加几个断点,以便可以精确地定位错误。图像捕获是否正常工作?您还可以在cvCloneImage和cvCreateImage之后检查映像是否正确分配。我已经有一段时间没有使用VC++了,但是在断点处观察变量应该还是很容易的。
IplImage* imgThresh = GetThresholdedImage(imgHSV, blue_lower, blue_upper);