python-OpenCV-凸包

前言

python-OpenCV-凸包

#案例:Fu Xianjun. All Rights Reserved.

一、凸包是什么?
凸包(Convex Hull)是一个计算几何(图形学)中的概念。

在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,...Xn)的凸组合来构造.

在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。

用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点
python-OpenCV-凸包_第1张图片

二、使用步骤

1.引入代码

hull = cv2.convexHull( points[,clockwise[,returnPoints]] ) #获取凸包

2.读入数据

import cv2
import numpy as np
 
img = cv2.imread('contours2.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#阈值处理
ret,binary = cv2.threshold(gray,127,255,0)
#查找轮廓
contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
hull = cv2.convexHull(contours[0])
cv2.polylines(img,[hull],True,(255,255,0),2)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.结果如下

python-OpenCV-凸包_第2张图片

 python-OpenCV-凸包_第3张图片

 

4.凸包图像缺陷检测

#案例:Fu Xianjun. All Rights Reserved.
import cv2
import numpy as np
img = cv2.imread('binaryhand.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#阈值处理
ret,binary = cv2.threshold(gray,127,255,0)
#查找轮廓
contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#凸包
img1 = img.copy()
hull = cv2.convexHull(contours[0])
cv2.polylines(img1,[hull],True,(0,255,0),2)
print("cv2.convexHull():",cv2.isContourConvex( hull ))
cv2.imshow('img1',img1)
#逼近多边形
img2 = img.copy()
epsilon = 0.01*cv2.arcLength(contours[0],Ture)
approx1 = cv2.approxPolyDP(contours[0],epsilon ,True)#拟合精确度
img1  =cv2.polylines(img2,[approx1],True,(255,255,0),2)
print("cv2.approxPolyDP():",cv2.isContourConvex( approx1 ))
cv2.imshow('approxPolyDP1',img2)
#释放窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

python-OpenCV-凸包_第4张图片

 python-OpenCV-凸包_第5张图片

 

你可能感兴趣的:(opencv,人工智能,计算机视觉)