案例 ©Fu Xianjun. All Rights Reserved.
一、读取图像
知识储备:凸包的概念
凸包指的是完全包含原有轮廓,并且仅由轮廓上的点所构成的多边形。凸包的每一处都是凸的,即在凸包内连接任意两点的直线都在凸包的内部。在凸包内,任意连续三个点的内角小于
180°。
知识储备:凸包的获取
hull=cv2.convexHull(points[,clockwise[,returnPoints]]
hull:凸包角点。
clockwise: 布尔值,True时,凸包角点将按顺时针方向排序,False就是逆时针排列凸包角点。
returnPoints: 布尔值默认True,函数返回凸包角点的 x/y 轴坐标,False时,返回轮廓中凸包角点的索引。
知识储备:凸包的绘制
cv2.polylines(src, [points], isClosed,color, thickness)
src:要处理的图像。
points:点集。
isClosed:布尔型,True表示的是线段闭合,False表示的是仅保留线段。
color:线段颜色,格式是(B,G,R)值。
thickness:数值型,厚度,默认值为1,如果对封闭图形,正方形,三角形等传入-1,则会填充整个图形。
知识储备:凸缺陷的概念
凸包与轮廓之间的部分,称为凸缺陷。轮廓上距离这条线最远的点就是凸缺陷的点。
知识储备:cv2.convexityDefects()函数
convexityDefects = cv2.convexityDefects(contour, convexhul)
contour:轮廓。
convexhull:凸包.
1、凸包绘制
知识储备:Extent
可以使用轮廓面积与矩形边界(矩形包围框、矩形轮廓)面积之比Extend来描述图像及其轮廓特征。
计算方法为: Extend =轮廓面积/矩形边界面积
知识储备:最大值和最小值及它们的位置
OpenCV提供了函数cv2.minMaxLoc(),用于在指定的对象内查找最大值、最小值及其位置。
该函数的语法格式是: min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(imgray, mask = mask)
● min_val:最小值。
● max_val:最大值。
● min_loc:最小值的位置。
● max_loc:最大值的位置。
二、凸缺陷检测
1、凸缺陷
2、轮廓常见特征值
知识储备:宽高比
可以使用宽高比(AspectRation)来描述轮廓,例如矩形轮廓的宽高比为: 宽高比=宽度(Width)/高度(Height)
知识储备:Extent
可以使用轮廓面积与矩形边界(矩形包围框、矩形轮廓)面积之比Extend来描述图像及其轮廓特征。
计算方法为: Extend =轮廓面积/矩形边界面积
宽高比
Extend
最大值和最小值及它们的位置
极点
知识储备:极点
有时,我们希望获取某个对象内的极值点,例如最左端、最右端、最上端、最下端的四个点。OpenCV提供了相应的函数来找出这些点,通常的语法格式是:
leftmost = tuple(cnt[cnt[:, :,0].argmin()][0])
rightmost = tuple(cnt[cnt[:, :,0].argmax()][0])
topmost = tuple(cnt[cnt[:, :,1].argmin()][0])
bottommost = tuple(cnt[cnt[:, :,1].argmax()][0])
3、轮廓特征值的应用场景
分类1