2013-03-24 23 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