【问题标题】:Why doesn't OpenCV findContour method always find closed outer contour?为什么 OpenCV findContour 方法总是找不到闭合的外轮廓?
【发布时间】:2015-11-15 16:41:23
【问题描述】:

我有两张来自同一相机位置的图像。它们的区别在于,一个是用正射法拍摄的,一个是用透视投影法拍摄的。

这是两张图片:

当我对它们运行 findContour OpenCV 方法时,结果如下:

为什么 OpenCV 没有为透视图找到闭合的外轮廓曲线?

我尝试了 CV_RETR_TREE 和 CV_RETR_EXTERNAL 标志以及 CV_CHAIN_APPROX_SIMPLE 和 CV_CHAIN_APPROX_NONE 标志的组合。

这是 findContour 方法的 documentationsample code(我正在使用)。

【问题讨论】:

    标签: opencv opencv-contour


    【解决方案1】:

    实际上我无法重现您的问题。试试这段代码:

    #include <opencv2\opencv.hpp>
    #include <vector>
    using namespace std;
    using namespace cv;
    
    int main()
    {
        RNG rng(1234);
    
        Mat3b img = imread("path_to_image");
    
        Mat1b gray;
        cvtColor(img, gray, COLOR_BGR2GRAY);
        Mat1b bw = ~gray;
    
        vector<vector<Point>> contours;
        findContours(bw, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);
    
        for (int i = 0; i < contours.size(); ++i)
        {
            Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
            drawContours(img, contours, i, color, 2);
        }
    
        imshow("Result", img);
        waitKey();
    
        return 0;
    }
    

    结果:

    【讨论】:

    • 您好三木,非常感谢您的帮助。我试过你的代码,它工作。您的代码和我的代码之间的区别在于,在调用 findContour 方法之前,我还对图像进行了模糊处理。我猜出于某种原因,这对轮廓检测没有帮助。
    • 您应该在二进制(黑白)图像上调用findContours。模糊会产生一些中间值,可能会弄乱findContours
    猜你喜欢
    • 1970-01-01
    • 2011-10-03
    • 2012-05-12
    • 2023-03-18
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多