OpenCV——图像轮廓2

本文介绍了OpenCV中如何获取图像轮廓的凸包,利用`cv2.convexHull`函数实现,并讲解了凸包的定义及点的排序方式。接着讨论了凸缺陷的概念,即凸包与轮廓之间的区域,并提到了`cv2.convexityDefects`函数用于查找这些缺陷。最后,提到了二值化在后续操作中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章素材来源© 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,则会填充整个图形。

知识储备:凸缺陷的概念

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

将图片二值化方便后继操作

img = cv2.imread('hand.png', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化

# 图片轮廓
contours, hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)
n=len(contours)       #轮廓个数
contoursImg=[]
x=0 #初始化要绘制的轮廓索引
for i in range(n):
    area = cv2.contourArea(contours[i])
    if area>10000:    
        print(f"轮廓{i}的面积:\n{area}")
        x=i
cnt = contours[x]
cv2.imshow("binary",binary)
#寻找凸包并绘制凸包(轮廓)
hull = cv2.convexHull(cnt)
cv2.polylines(img,[hull],True,(0,255,0),2)
cv2.drawContours(img,contours,x,(0,0,255), 3)

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

convexityDefects = cv2.convexityDefects(contour, convexhul)

contour:轮廓。

convexhull:凸包.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值