opencv中使用Mat进行轮廓查找的函数如下:
void findContours(InputOutputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset=Point())
opencv文档地址
这个函数看起来挺简单的,我们输入一张图像,它就给我们返回相应的轮廓,但是一张图像经过不同处理,得到的轮廓可是会有非常大的不同的。
使用轮廓查找我遇到了如下的几个问题:
1.CV_RETR_EXTERNAL下找到的轮廓居然是整张图像边缘
此处查找轮廓的步骤为:
- 输入图像
- 将图像转为gray
- 将gray图像转为二值图像
- 将二值图像作为findContours输入
- 画出轮廓
使用的图片为一张发票图像(这张图片是从一篇新闻里边取到的,应该不涉及隐私信息吧):
二值化图像结果为:
最后画出的轮廓如下:
运行输出的轮廓数如下:
代码如下:
int main(int argc, char *argv[])
{
//载入图像,并判断图像是否为空
Mat srcImage = imread("fapiao.jpg");