|
本章讲一下图像轮廓。
一、什么是图像轮廓
边缘和轮廓的关系:
另外要注意三个问题:
说明: 1. 要求一个图像的轮廓,这个图像必须是二值的。如果本来是彩色图像,或者灰度图像怎么办呢?必须先调整为二值图像。 2. 第一个图像,黑色背景,白色前景。 第二个图像,也是。是一个带孔的白色方块。
二、使用函数
我们使用两个函数:
第一个函数是查找图像轮廓,它会返回一个变量,这里面存储的就是轮廓信息。 第二个函数是绘制轮廓。它需要依靠第一个函数的返回值。
2.1 findContours()
image //修改后的原始图像。实际上就是对图像进行二值化处理,得到的二值化的图像。 contours //最后得到的轮廓 hierarchy //保存的是轮廓信息。这个轮廓的父轮廓是谁,子轮廓是谁...这样的信息 mode //轮廓检索的模式:
第一个是只检测外轮廓。 后面三个是所有轮廓都检测。一般用最后一个。
method //轮廓的近似方法。
一共有四种,我们重点关注的是前两种。 第一种是存储所有的轮廓。 第二种是简单的一种方式,这种方式会进行压缩。比如说一个矩形,存储4个点就可以了。 比如,下面的例子。 使用第一种方式需要保存734个点,使用第二种方式只需要保存4个点。
2.2 drawContours()函数
o //原始图像,要对谁进行绘制 contours //是从findContours()得到的信息 contourldx //要绘制第0个轮廓,就写0;要绘制第1个轮廓,就写1...要都绘制则为-1。 color //轮廓颜色
例1:
结果:
发现有一个问题,就是原始图像o也改变了。 为了不让原始图像改变,需要拷贝一份。
结果:
例2:绘制第0个边缘
结果:
如果改成1:
|