Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 将cvFindContour与CVMinareRect2一起使用_Opencv - Fatal编程技术网

Opencv 将cvFindContour与CVMinareRect2一起使用

Opencv 将cvFindContour与CVMinareRect2一起使用,opencv,Opencv,我成功地使用了cvDrawContour,但当我尝试使用cvMinRectArea2时,它只显示一个点。有什么想法吗?这是源代码 IplImage *src = cvLoadImage("SignImg.jpg",0); IplImage *dst_img = 0; IplImage *img = cvCreateImage(cvGetSize(src),8,3); CvBox2D rect; CvMem

我成功地使用了cvDrawContour,但当我尝试使用cvMinRectArea2时,它只显示一个点。有什么想法吗?这是源代码

         IplImage *src = cvLoadImage("SignImg.jpg",0);

         IplImage *dst_img = 0;
         IplImage *img = cvCreateImage(cvGetSize(src),8,3);
         CvBox2D rect;

        CvMemStorage *storage = cvCreateMemStorage ();
         CvSeq *contours = 0;

        char a[255];
        sprintf(&a[0],"%s",openFileDialog1->FileName);

        dst_img = cvLoadImage(a,0);

        cvFindContours (src, storage, &contours, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE ,cvPoint(0,0));          

        cvCvtColor(dst_img,img,CV_GRAY2BGR);

        cvDrawContours (img, contours, CV_RGB(255,0,0), cvScalarAll(255),1,1,8,cvPoint(0,0));
        rect=cvMinAreaRect2 (contours,0);
        cvEllipseBox(img,rect,cvScalarAll(0),5,8,0);
正确的使用方法如下所示:

    for( ; contour != 0; contour = contour->h_next )
    {
        CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );

        /* replace CV_FILLED with 1 to see the outlines */
        cvDrawContours( dst, contour, color, color, -1, CV_FILLED, 8 );
    }

如果不够明显,您的变量
等高线
就是一个数组,您需要迭代它并绘制每个元素!否则,您将只绘制阵列的第一个元素。

这样,您只绘制图像中获得的第一个轮廓。你应该把它画在一个单独的空白图像上,看看它是否也覆盖在另一个颜色相同的零件上,这样它就不可见了。谢谢你的回复。我需要在这些点周围画一个矩形。我如何包装它们?