轮廓检测-凸包:解决出现多个轮廓的问题

问题:检测手掌图片凸包的时候,会出现多个轮廓。

解决方法:在二值化处理的时候使用大津算法

代码演示:

import cv2 as cv

img = cv.imread("hand.jpg")
img = cv.resize(img, None, fx=0.4, fy=0.4)
# 轮廓检测
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY+cv.THRESH_OTSU)  # 大津算法
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

for i in range(len(contours)):
    hull = cv.convexHull(contours[i])
    length = len(hull)
    for i in range(len(hull)):
        cv.line(img, tuple(hull[i][0]), tuple(hull[(i+1) % length][0]), (0, 255, 0), 2)
cv.imshow("r1", img)
cv.waitKey(0)

原因:大津算法可以自动匹配到最优的阈值

OTSU算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值