繁体   English   中英

OpenCV findContours函数问题

[英]OpenCV findContours function problem

我试图在OpenCV中使用findContours函数,但VS 2008给出了一个错误说:

OpenCV错误:未知函数中的错误标志(参数或结构字段)(无法识别或不支持的数组类型),文件........ \\ ocv \\ opencv \\ src \\ cxcore \\ cxarr ay.cpp,第2476行

此应用程序已请求Runtime以不寻常的方式终止它。 有关更多信息,请联系应用程序的支持团队。 按任意键继续 。

这是代码:

Mat_<Vec<float,3>> originalimage;

Mat_<Vec<float,3>> resultingimage;

vector<vector<cv::Point>> v;

originalimage = cv::imread("Original.ppm");

cv::findContours(originalimage,v,CV_RETR_LIST,CV_CHAIN_APPROX_NONE);

提前致谢

FindContours只接受二进制图像。 也就是说,任何输出cvThreshold cvAdapiveThreshold cvCanny的图像

尝试在cv :: findContours之前添加此语句

cvThreshold(originalImage,resultingImage,100,100,CV_THRESH_BINARY) 

然后使用resulImage调用findcontours。

如果它工作,那么你应该输入正确的参数到cvThreshold(100只是一个例子)。检查该问题的参考。

编辑:resulImage应该是一个单一的频道图像!!

我有与该功能相同的问题(或至少类似的问题)。 我无法解决它,所以我使用了旧的C风格的cvFindContours函数。 我已经包含了一个示例函数,我使用了cvFindContours函数来清理blob图像。 这可能不是最快的解决方案,但是它很有效。

void filtBproject(Mat& Bproject){

    Scalar          color       = CV_RGB(255,255,255); // text color
    IplImage*       BprojectIpl =  &IplImage(Bproject);
    CvMemStorage*   storage     = cvCreateMemStorage(0);
    CvSeq*          contours    = 0;
    int             numCont     = 0;
    int             contAthresh = 45;

    numCont= cvFindContours( BprojectIpl, storage, &contours, sizeof(CvContour),
                    CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );

    cvSet(BprojectIpl, cvScalar(0,0,0));
    for( ; contours != 0; contours = contours->h_next )
        {

            if ( (cvContourArea(contours, CV_WHOLE_SEQ) > contAthresh) ){
                cvDrawContours( BprojectIpl, contours, color, color, -1, CV_FILLED, 8 );
            }
        }
}

对于v矢量,您需要添加如下空格:

vector<vector<cv::Point> > v;

非常微妙和愚蠢,但它的工作原理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM