点击此处返回总目录

 

 

本章讲一下图像轮廓。

 

一、什么是图像轮廓

 

边缘和轮廓的关系:

 

12.1 图像轮廓

 

 

另外要注意三个问题:

12.1 图像轮廓

 

说明:

1. 要求一个图像的轮廓,这个图像必须是二值的。如果本来是彩色图像,或者灰度图像怎么办呢?必须先调整为二值图像。

2. 第一个图像,黑色背景,白色前景。  第二个图像,也是。是一个带孔的白色方块。

12.1 图像轮廓

 

 

二、使用函数

 

我们使用两个函数:

12.1 图像轮廓

 

第一个函数是查找图像轮廓,它会返回一个变量,这里面存储的就是轮廓信息。

第二个函数是绘制轮廓。它需要依靠第一个函数的返回值。

 

2.1 findContours()

 12.1 图像轮廓

 

image               //修改后的原始图像。实际上就是对图像进行二值化处理,得到的二值化的图像。

contours           //最后得到的轮廓

hierarchy          //保存的是轮廓信息。这个轮廓的父轮廓是谁,子轮廓是谁...这样的信息

mode                //轮廓检索的模式:

 

          12.1 图像轮廓

          第一个是只检测外轮廓。

          后面三个是所有轮廓都检测。一般用最后一个。

 

 

method               //轮廓的近似方法。

         12.1 图像轮廓

    

         一共有四种,我们重点关注的是前两种。

         第一种是存储所有的轮廓。

         第二种是简单的一种方式,这种方式会进行压缩。比如说一个矩形,存储4个点就可以了。

         比如,下面的例子。

         12.1 图像轮廓

         使用第一种方式需要保存734个点,使用第二种方式只需要保存4个点。

 

 

     

 

2.2 drawContours()函数

12.1 图像轮廓

 

o           //原始图像,要对谁进行绘制

contours          //是从findContours()得到的信息

contourldx       //要绘制第0个轮廓,就写0;要绘制第1个轮廓,就写1...要都绘制则为-1。

color                //轮廓颜色

 

 

 

 

 

例1:

12.1 图像轮廓

 

结果:

12.1 图像轮廓

 

发现有一个问题,就是原始图像o也改变了。

为了不让原始图像改变,需要拷贝一份。

 

 

12.1 图像轮廓

 

结果:

12.1 图像轮廓

 

 

例2:绘制第0个边缘

12.1 图像轮廓

 

结果:

12.1 图像轮廓

 

如果改成1:

12.1 图像轮廓

 

 

 

 

 

 

 

相关文章: