几何图形查找
目录
前言
opencv 查找一个图片上的几何图像,通常我们使用findContours方法去查找图片中的轮廓,再通过查找到的轮廓数据加以清洗筛选出目标轮廓。
基本概念
一、轮廓
什么是轮廓
简单说轮廓就是一些列点相连组成形状,它们拥有同样的颜色,轮廓发现在图像的对象分析,对象检测等方面是非常有用的工具,在OpenCV中使用轮廓发现相关函数时要求输入的是二值图像,及做二值化处理,只保留黑白,这样便于轮廓提取、边缘提取等操作
函数
轮廓发现的函数与参数如下:
|
|
描述:查找二进制图像中的轮廓。该函数使用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 |
二、多边形逼近
什么是多边形逼近
多边形逼近,是通过对轮廓外形无限逼近,删除非关键点,得到轮廓的关键点,不断逼近轮廓真实形状的方法
函数
多边形逼近的函数和参数如下:
|
|
描述:函数approxPolyDP以指定的精度近似多边形曲线逼近一条曲线或多边形和另一条曲线/多边形的多边形顶点,以便它们之间的距离小于或等于指定的精度。它使用Douglas-Peucker算法 http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
参数名 | 作为 | 备注 |
---|---|---|
curve | 存储在vector或Mat中的2D点的输入向量 | 表示输入的轮廓点集合 |
approxCurve | 近似结果。类型应与输入曲线的类型匹配 | 越小表示相似逼近越厉害 |
epsilon | 指定近似精度的参数。这是最大距离在原始曲线及其近似值之间 | |
closed | 如果为true,则近似曲线是闭合的(其第一个和最后一个顶点为连接的)。否则,它不会关闭 |
三、几何距计算
什么是几何距计算通过计算一阶几何距得到指定轮廓的中心位置,计算几何距的函数与参数
图像几何距计算是图像的几何特征,高阶几何距中心化之后具有特征不变性,可以产生Hu距输出,用于形状匹配等操作,这里我们通过计算一阶几何距得到指定轮廓的中心位置。
函数
计算几何距的函数与参数解释如下:
|
|
描述:计算所有时刻,直到多边形或栅格化形状的三阶。该函数计算矢量形状或栅格化形状的力矩,直到三阶。结果返回到结构cv :: Moments中。
参数名 | 作为 | 备注 |
---|---|---|
array | 栅格图像(单通道,8位或浮点2D阵列)或阵列(2D点(Point或Point2f) | 表示指定输入轮廓 |
binaryImage | 如果为true,则将所有非零图像像素都视为1。该参数仅用于图像 | 默认为None |