OpenCv图像轮廓处理
1,简单几何图像绘制
简单几何图像一般包括点,直线,矩阵,圆,椭圆,多边形等等。
下面学习一下 opencv对像素点的定义。图像的一个像素点有1或3个值,对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值,他们表现出不同的颜色。
其实有了点才能组成各种多边形,才能对多边形进行轮廓检测,所以下面先练习一下简单的几何图像绘制。
2,图像轮廓
图像轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。
- 为了更加准确,要使用二值化图像 。在寻找轮廓之前,要进行阈值化处理,或者Canny边界检测。
- 查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中。
- 在OpenCV中,查找轮廓就像在黑色背景中超白色物体。你应该记住要找的物体应该是白色而背景应该是黑色 。

参数解释
image:输入图像,图像必须为单通道图像(二值图像)。我们可以使用compare、inRange、threshold、adaptiveThreshold、Canny等函数来创建二值图像。
contours:检测到的轮廓,每个轮廓都是以点向量的形式进行存储即使用point类型的vector表示。
hierarchy:可选的输出向量(std::vector),包含了图像的拓扑信息,作为轮廓数量的表示hierarchy包含了很多元素,每个轮廓contours[i]对应hierarchy中hierarchy[i][0]~hierarchy[i][3],分别表示后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓的索引,如果没有对应项,则相应的hierarchy[i]设置为负数。
mode:轮廓检索模式,可以通过cv::RetrievalModes()查看详细信息:
RETR_EXTERNAL:表示只检测最外层轮廓,对所有轮廓设置hierarchy[i][2]=hierarchy[i][3]=-1
RETR_LIST:提取所有轮廓,并放置在list中,检测的轮廓不建立等级关系。
RETR_CCOMP:提取所有轮廓,并将轮廓组织成双层结构(two-level hierarchy),顶层为连通域的外围边界,次层位内层边界。
RETR_TREE:提取所有轮廓并重新建立网状轮廓结构
method:轮廓近似方法,可以通过cv::ContourApproximationModes()查看详细信息:
CHAIN_APPROX_NONE:获取每个轮廓的每个像素,相邻的两个点的像素位置差不超过1;
CHAIN_APPROX_SIMPLE:压缩水平方向,垂直方向,对角线方向的元素,值保留该方向的重点坐标,如果一个矩形轮廓只需4个点来保存轮廓信息
CHAIN_APPROX_TC89_L1和CHAIN_APPROX_TC89_KCOS使用Teh-Chinl链逼近算法中的一种;
offset:轮廓点可选偏移量,有默认值Point(),对ROI图像中找出的轮廓并要在整个图像中进行分析时使用。
定义并找到轮廓:



