2017-06-02 107 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的值来查找你的区域轮廓 –