为什么OpenCV findContour方法总是找不到封闭的外轮廓?

时间:2015-08-21 16:37:05

标签: opencv opencv-contour

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

这是两张图片:

Perspective and Orthographic sample images

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

enter image description here

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

我使用CV_CHAIN_APPROX_SIMPLE和CV_CHAIN_APPROX_NONE标志的组合尝试了CV_RETR_TREE和CV_RETR_EXTERNAL标志。

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

1 个答案:

答案 0 :(得分:3)

其实我无法重现你的问题。试试这段代码:

#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;
}

结果:

floating-point