在opencv中绘制连接的组件

时间:2014-07-28 15:13:52

标签: c++ opencv

我一直在阅读学习OpenCV的书。

我试图在第5章中使用PyrSegmentation方法做一些有用的事情:

void f(IplImage* src, IplImage* dst) 
{
    CvMemStorage* storage = cvCreateMemStorage(0);
    CvSeq* comp = NULL;

    cvPyrSegmentation( src, dst, storage, &comp, 4, 200, 50 );     
    int n_comp = comp->total;

    for( int i=0; i < n_comp; i++ ) {
    CvConnectedComp* cc = (CvConnectedComp*) cvGetSeqElem( comp, i );
    // do_something_with( cc );
    }
cvReleaseMemStorage( &storage );
}

我似乎无法在图像上绘制结果。

我尝试了一些方法,包括创建一个新图像,将其删除,然后运行一个包含以下内容的循环:

if (inputKey == 32)
{
  // Draw surface
  cvZero(surface);
  cvDrawContours( surface, cc->contour, cvScalarAll(255), cvScalarAll(255), 100);
  cvShowImage( "Contour", surface);

  printf("Show new surface (%d)...\n", i);
}

然而,无论我做什么,我最终都会得到一张空图像。似乎确实返回了有效数据,我似乎无法显示它。

任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是cvPyrSegmentation没有填充设置CvConnectedComponent的轮廓成员。根据文档,人们需要自己计算。我正在研究这个问题,如果有人在寻找答案,可以在这里发布一个问题:

https://stackoverflow.com/questions/25433662/display-regions-detected-by-cvpyrsegmentation-in-opencv