图像轮廓一

图像轮廓的概念
边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。
图像轮廓是图像中非常重要的一个特征信息,通过对图像轮廓的操作,我们能够获取目标图像的大小、位置、方向等信息。
轮廓是一系列相连的点组成的曲线,代表了物体的基本外形,相对于边缘,轮廓是连续的,边缘并不全部连续。
查找并绘制轮廊
一个轮廊对应着一系列的点,这些点以某种方式表示图像中的一条曲线。在OpenCV中,函数cv2.findContours()用于查找图像的轮廊,并能够根据参数返回特定表示方式的轮廊(曲线)。函数cv2。drawContours()能够将查找到的轮廊绘制到图像上,该函数可以根据参数在图像上绘制不同方式(实心/空心点,以及线条的不同粗细、颜色等)的轮廊,可以绘制全部轮廊也可以仅绘制指定的轮廊。
查找
图像轮廓一_第1张图片
cv2.findContours()函数
contours,hierarchy=cv2.findContours(image,mode,method)
contours:返回的轮廓。例如contours[i]表示第i个轮廓。
hierarchy:图像的拓扑信息(轮廓层次)。
image:输入的图像。
mode:轮廓搜索模式:决定了轮廓的提取方式。
method:轮廓近似方法:决定了如何表达轮廓。
图像轮廓一_第2张图片

绘制
image=cv2.drawContours(image, contours, contourIdx,
color, thickness=None, lineType=None, hierarchy=None,
maxLevel=None, offset=None)
图像轮廓一_第3张图片图像轮廓一_第4张图片逐个绘制一幅图像内的边缘信息
图像轮廓一_第5张图片图像轮廓一_第6张图片实物轮廊检测
图像轮廓一_第7张图片
矩特征
比较两个轮廓最简单的方法是比较二者的轮廓矩。轮廓矩代表了一个轮廓、一幅图像、一组点集的全局特征。矩信息包含了对应对象不同类型的几何特征,例如大小、位置、角度、形状等。矩特征被广泛地应用在模式识别、图像识别等方面。
OpenCV提供了函数cv2.moments()来获取图像的moments特征。通常情况下,我们将使用函数 cv2.moments()获取的轮廊特征称为“轮廊矩”。轮廊矩描述了一个轮廊的重要·特征·,使用轮廊矩可以方便地比较两个轮廊。
图像轮廓一_第8张图片图像轮廓一_第9张图片图像轮廓一_第10张图片图像轮廓一_第11张图片计算轮廓的面积
图像轮廓一_第12张图片显示面积小于20000的轮廓
图像轮廓一_第13张图片计算轮廊的长度
length=cv2.arcLength(curve,closed)
curve :轮廓。
closed :布尔值,当为True时,表示闭合.
图像轮廓一_第14张图片Hu特征
Hu矩是归一化中心矩的线性组合,Hu矩再图像旋转,缩放,平移等操作后,仍能保持矩的不变性,经常使用 Hu 矩来识别图像的特征。在 OpenCV 中,使用函数 cv2.HuMoments()可以得到 Hu 距。该函数使用 cv2.moments()函数的返回值作为参数,返回 7 个 Hu 矩值。
形状匹配
通过Hu 矩可以来判断两个对象的一致性。但是结果比较抽象,
OpenCV 提供了 cv2.matchShapes() 对两个对象的Hu矩进行比较。
retval = cv2.matchShapes(contour1, contour2, method, 0.0)
contour1 :第一个轮廓或灰度图像。
contour2:第二个灰度或轮廓图像。
method :比较两个对象的Hu 矩的方法,写1吧
图像轮廓一_第15张图片矩形包围框
图像轮廓一_第16张图片图像轮廓一_第17张图片最小外包矩形框
图像轮廓一_第18张图片图像轮廓一_第19张图片图像轮廓一_第20张图片最小包围圆形
图像轮廓一_第21张图片图像轮廓一_第22张图片最优拟合椭圆
图像轮廓一_第23张图片图像轮廓一_第24张图片最优拟合直线
图像轮廓一_第25张图片图像轮廓一_第26张图片逼近多边形
在数字化时,要对曲线进行采样,即在曲线上取有限个点,将其变为折线,并且能够在一定程度上保持原有的形状。
图像轮廓一_第27张图片图像轮廓一_第28张图片绘制hand.png的手掌多边形轮廓
图像轮廓一_第29张图片图像轮廓一_第30张图片图像轮廓一_第31张图片

你可能感兴趣的:(OpenCV,opencv)