目录

几何图形查找

http://image.catbro.cn/upload_2dc6b38258cf5c60d25cbf3f35ae8e18.png

前言

opencv 查找一个图片上的几何图像,通常我们使用findContours方法去查找图片中的轮廓,再通过查找到的轮廓数据加以清洗筛选出目标轮廓。

基本概念

一、轮廓

什么是轮廓

简单说轮廓就是一些列点相连组成形状,它们拥有同样的颜色,轮廓发现在图像的对象分析,对象检测等方面是非常有用的工具,在OpenCV中使用轮廓发现相关函数时要求输入的是二值图像,及做二值化处理,只保留黑白,这样便于轮廓提取、边缘提取等操作

函数

轮廓发现的函数与参数如下:

1
findContours(image, mode, method, contours=None, hierarchy=None, offset=None)

描述:查找二进制图像中的轮廓。该函数使用CITE算法:Suzuki85从二进制图像检索轮廓。轮廓是用于形状分析以及对象检测和识别的有用工具

参数名 作用 备注
image 一个8位单通道图像,非0像素被视为1,0像素被视为0,因此图像被视为binary。你可以使用compare、inRange、threshold、adaptiveThreshold、Canny等用于创建灰度或者彩色的二进制图像 如果mode等于#RETR_CCOMP或#RETR_FLOODFILL,则输入也可以是标签(CV_32SC1)的32位整数图像
contours 检测到的轮廓。每个轮廓都存储为点的向量
hierarchy 层次结构,可选的输出向量,其中包含有关图像拓扑的信息,它们有与轮廓数量一样多的元素,对于每个第i哥轮廓的轮廓[i],元素等级[i] [0],等级[i] [1],等级[i] [2]和等级[i] [3]被设置为基于0的索引。在同一层次级别的下一个和上一个轮廓的轮廓中,第一个子级轮廓和父轮廓。如果轮廓i没有下一个,上一个,父级或嵌套轮廓,层次结构[i]的相应元素将为负。
mode 模式,轮廓检索模式 请参见#RetrievalModes
method 轮廓点的编码方式 参见#ContourApproximationModes

二、多边形逼近

什么是多边形逼近

多边形逼近,是通过对轮廓外形无限逼近,删除非关键点,得到轮廓的关键点,不断逼近轮廓真实形状的方法

函数

多边形逼近的函数和参数如下:

1
approxPolyDP(curve, approxCurve, closed, approxCurve=None)

描述:函数approxPolyDP以指定的精度近似多边形曲线逼近一条曲线或多边形和另一条曲线/多边形的多边形顶点,以便它们之间的距离小于或等于指定的精度。它使用Douglas-Peucker算法 http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm

参数名 作为 备注
curve 存储在vector或Mat中的2D点的输入向量 表示输入的轮廓点集合
approxCurve 近似结果。类型应与输入曲线的类型匹配 越小表示相似逼近越厉害
epsilon 指定近似精度的参数。这是最大距离在原始曲线及其近似值之间
closed 如果为true,则近似曲线是闭合的(其第一个和最后一个顶点为连接的)。否则,它不会关闭

三、几何距计算

什么是几何距计算通过计算一阶几何距得到指定轮廓的中心位置,计算几何距的函数与参数

图像几何距计算是图像的几何特征,高阶几何距中心化之后具有特征不变性,可以产生Hu距输出,用于形状匹配等操作,这里我们通过计算一阶几何距得到指定轮廓的中心位置。

函数

计算几何距的函数与参数解释如下:

1
moments(array, binaryImage=None)

描述:计算所有时刻,直到多边形或栅格化形状的三阶。该函数计算矢量形状或栅格化形状的力矩,直到三阶。结果返回到结构cv :: Moments中。

参数名 作为 备注
array 栅格图像(单通道,8位或浮点2D阵列)或阵列(2D点(Point或Point2f) 表示指定输入轮廓
binaryImage 如果为true,则将所有非零图像像素都视为1。该参数仅用于图像 默认为None