cv::findContours正在修改源图像OpenCV 2.3。

7
从OpenCV文档中可知,cv::findContours函数中的源图像是const类型,但在我的应用程序中却出现了一些奇怪的问题。我使用cv::inRange函数获取特定颜色的阈值图像,并使用cv::moments函数获取阈值图像中白色像素的中心,这个功能正常运行。
此外,我还想实现查找最大轮廓并定位该轮廓中心矩的代码。在代码中添加cv::findContours函数后,我发现输出结果出现了奇怪的行为,然后我想使用以下代码检查源图像的情况:
cv::Mat contourImage;
threshedImage.copyTo(contourImage); // threshedImage is the output from inRange
cv::findContours(threshedImage, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE, cv::Point(0,0));
cv::Mat temp;
cv::absdiff(threshedImage,contourOutput, temp);
cv::namedWindow("absdiff");
cv::imshow("absdiff",temp);

接下来,输出显示threshedImage和contourImage之间存在差异。这是怎么可能的?有人用cv::findContours得到了类似的结果吗?


2
是的,它确实会修改...所以使用cvCopy复制图像,然后再使用... - rotating_image
1个回答

5

错误! 文档 明确说明:

此函数会修改源 图像

因此,如果您需要保持原始图像不变,请复制该图像并将副本传递给 cv::findContours()


1
谢谢提供的信息,我没有注意到。 - Banana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接