原来在使用Opencv的findContours的时候一直没有注意到,这个函数会改变输入的图像。Opencv的官网上的说明文档里面也指出了这一点
当我们要去找一张二值图里面的轮廓的时候,如果没有注意到这一点,很可能我们的二值图在找到轮廓之后就变掉了。一般的解决方法是利用clone()复制出另外一张图输入findContours函数里面,这样可以保证原图不被改变。对比结果如下,其中mask表示输入的二值图像:
采用findContours(mask.clone(), contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE)之后mask如下所示:
采用findContours(mask, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE)之后mask如下所示:
从上面的例子可以看出,findContours在寻找轮廓的时候会做提取边缘的处理,为了保证输入的源图像在findContours之后保持不变,最好还是加上clone()。
新闻热点
疑难解答