2017-06-02 109 views
-1

我剛開始學習openCV,我想編寫一個可以檢測X光片中器官的程序。結果我想看起來像 this
我試過cv2.findContours,但它無法檢測到正確的,然後我使用凸包,它返回like this這不是我不想要的。
有沒有其他的方法,你可以找到openCV中的輪廓,可以幫助我與這個?我只能在上面找到兩種方法。在X光片上找到輪廓

回答

1

必須使用validContours這樣你就可以在使用後findContours使用此代碼,您更改boundRect值來查找你想要

vector<vector<Point> > contours_poly(contourss.size()); 
       vector<Rect> boundRect(contourss.size()); 
       vector<Point2f>center(contourss.size()); 
       vector<float>radius(contourss.size()); 
       //Get poly contours 
       for (int i = 0; i < contourss.size(); i++) 
       { 
        approxPolyDP(Mat(contourss[i]), contours_poly[i], 3, true); 
       } 
       //Get only important contours, merge contours that are within another 
       vector<vector<Point> > validContours; 
       for (int i = 0; i < contours_poly.size(); i++){ 
        Rect r = boundingRect(Mat(contours_poly[i])); 
        if (r.area() < 200)continue; 
        bool inside = false; 
        for (int j = 0; j < contours_poly.size(); j++){ 
         if (j == i)continue; 
         Rect r2 = boundingRect(Mat(contours_poly[j])); 
         if (r2.area() < 200 || r2.area()<r.area())continue; 
         if (r.x>r2.x&&r.x + r.width<r2.x + r2.width&& 
          r.y>r2.y&&r.y + r.height < r2.y + r2.height){ 
          inside = true; 
         } 
        } 
        if (inside)continue; 
        validContours.push_back(contours_poly[i]); 
       } 
       //Get bounding rects 
       for (int i = 0; i < validContours.size(); i++){ 
        boundRect[i] = boundingRect(Mat(validContours[i])); 
       } 
+0

感謝您與您的代碼,我可以找到確切的輪廓,我想要的區域 –

+0

你可以改變area和boundRect的值來查找你的區域輪廓 –