2013-03-24 64 views
1

我到目前为止已经试图找到一种方法来知道,如果一个点(cvPoint)是在同一个孔比另一个。我的解决方案是从cvFindContours()的应用中获取CvSeq,并用适当的颜色填充这些空洞以获得blob矩阵。 当会做,知道,如果一个点属于同一轮廓比另一点只包含在比较像素值,但我想不出为什么它不工作。OpenCV中得到点

不幸的是,这是谁的没有回答一个问题,我花了很多时间在谷歌和StackOverflow上(或者也许我寻找的关键词非常糟糕)。希望有人有线索;)

IplImage *imgTemp = cvCreateImage(cvGetSize(getMorph()), (getMorph())->depth, 1); 
    CvMemStorage *mem = cvCreateMemStorage(); 
    cvConvertImage(getMorph(), imgTemp); 
    CvSeq *contours = NULL; 
    cvFindContours(imgTemp, mem, &contours, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE); 

    int colIt=255; 
    for (CvSeq *ptr = contours; ptr != NULL; ptr = ptr->h_next) { 
     if(ptr->v_next != NULL) 
     { 
      CvScalar color = CV_RGB(colIt,colIt,colIt); 
      cvDrawContours(imgTemp, ptr->v_next, color, color, -1, CV_FILLED, 100); 
      --colIt; 
     } 
    } 

回答

0

这样做的最好方法是使用C++ API。随着C++ API就可以输出你的轮廓的层次,使人们更方便,以确定它们是否属于同一个轮廓。你可以找到findContours here的C++变体的解释。

例通过仅顶部loevel轮廓打算:

vector<vector<Point> > contours; 
vector<Vec4i> hierarchy; 
findContours(contourImage, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); 
int idx = 0; 
for (; idx >= 0; idx = hierarchy[idx][0]) { 
drawContours(image, contours, idx, Scalar(255), CV_FILLED); 
} 
0

大厦diip_thomas的回答,你也许可以使用pointPolygonTest来测试是否不Point2f谎言里面contour[i](其中contourvector<vector<Point> >i是这个向量的第i个元素)。一个例子见this answer