案例 ©Fu Xianjun. All Rights Reserved.

一、读取图像

python调包求凸包 python 凸包算法_opencv

知识储备:凸包的概念

        凸包指的是完全包含原有轮廓,并且仅由轮廓上的点所构成的多边形。凸包的每一处都是凸的,即在凸包内连接任意两点的直线都在凸包的内部。在凸包内,任意连续三个点的内角小于

180°。

python调包求凸包 python 凸包算法_宽高_02

知识储备:凸包的获取

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,则会填充整个图形。

知识储备:凸缺陷的概念

凸包与轮廓之间的部分,称为凸缺陷。轮廓上距离这条线最远的点就是凸缺陷的点。

python调包求凸包 python 凸包算法_最小值_03

知识储备:cv2.convexityDefects()函数

convexityDefects = cv2.convexityDefects(contour, convexhul)

contour:轮廓。

convexhull:凸包.

1、凸包绘制

python调包求凸包 python 凸包算法_宽高_04

python调包求凸包 python 凸包算法_宽高_05

知识储备: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、凸缺陷

python调包求凸包 python 凸包算法_宽高_06

python调包求凸包 python 凸包算法_opencv_07

2、轮廓常见特征值

知识储备:宽高比

可以使用宽高比(AspectRation)来描述轮廓,例如矩形轮廓的宽高比为: 宽高比=宽度(Width)/高度(Height)

知识储备:Extent

可以使用轮廓面积与矩形边界(矩形包围框、矩形轮廓)面积之比Extend来描述图像及其轮廓特征。

计算方法为: Extend =轮廓面积/矩形边界面积

        宽高比

python调包求凸包 python 凸包算法_宽高_08

        Extend

python调包求凸包 python 凸包算法_宽高_09

最大值和最小值及它们的位置

python调包求凸包 python 凸包算法_最小值_10

极点

知识储备:极点

有时,我们希望获取某个对象内的极值点,例如最左端、最右端、最上端、最下端的四个点。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])

python调包求凸包 python 凸包算法_python调包求凸包_11

3、轮廓特征值的应用场景

分类1

python调包求凸包 python 凸包算法_最小值_12