【问题标题】:Find the contour in a radiograph在射线照片中找到轮廓
【发布时间】:2017-06-02 19:49:32
【问题描述】:

我刚开始学习 openCV,我想编写一个可以检测 X 光片中的器官的程序。我想要的结果看起来像 this
我尝试了 cv2.findContours 但它无法检测到正确的,然后我使用凸包并返回 like this 这不是我想要的。
还有其他方法可以在openCV中找到可以帮助我的轮廓吗?上面我只能找到两种方法。

【问题讨论】:

    标签: c++ opencv image-processing opencv-contour


    【解决方案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]));
                    }
    

    【讨论】:

    • 谢谢你的代码,我可以找到我想要的确切轮廓
    • 你可以改变 area 和 boundRect 的值来找到你的区域轮廓
    猜你喜欢
    • 2021-01-08
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2020-10-20
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多