在 opencv2 和 opencv3 中使用 findContours 时的输出差异

output differences when using findContours in opencv2 and opencv3

我正在使用完全相同的步骤来查找图像的轮廓,但我在 Opencv 2.4.8 和 Opencv 3.2 中得到了两个不同的结果!有人知道为什么吗? 程序如下:

std::vector<std::vector<cv::Point> > contours;
    std::vector<cv::Vec4i> hierarchy;

    cv::imwrite("binImageInB.jpg", binImageIn);

    // find contour of the binary image 
    cv::findContours( binImageIn, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0) ); // Find the contours in the image   // save

    cv::imwrite("binImageIn.jpg", binImageIn);

输入图像为:

使用opencv 2.4.8时的输出:

以及使用Opencv3.2时的输出:

documentation for 2.4.x提到:

Note: Source image is modified by this function.


documentation for 3.3.1提到:

Since opencv 3.2 source image is not modified by this function.


通常,您使用 contourshierarchy 输出参数。由于以后的版本不再修改输入图像,我认为这是一个副作用,没有用。