当前位置:   article > 正文

Opencv:凸包检测提取轮廓Python实现_python opencv 提取轮廓后计算凸包

python opencv 提取轮廓后计算凸包

Opencv:凸包检测提取轮廓Python实现

一、原理

凸包检测
二值图像进行轮廓分析之后,对获取到的每个轮廓数据,可以构建每个轮廓的凸包,构建完成之后会返回该凸包包含的点集。根据返回的凸包点集可以绘制该轮廓对应的凸包。OpenCV对轮廓提取凸包的API函数如下:
convexHull(
InputArray points,
OutputArray hull,
bool clockwise = false,
bool returnPoints = true
)
points参数是输入的轮廓点集
hull凸包检测的输出结果,当参数returnPoints为ture的时候返回凸包的顶点坐标是个点集、returnPoints为false的是返回的是一个integer的vector里面是凸包各个顶点在轮廓点集对应的index
clockwise 表示顺时针方向或者逆时针方向
returnPoints表示是否返回点集
OpenCV中的凸包寻找算法是基于Graham’s扫描法

OpenCV中还提供了另外一个API函数用来判断一个轮廓是否为凸包,该方法如下:
isContourConvex(
InputArray contour
)

二、代码

import cv2 as cv

# 读取图像
src1 = cv.imread("C:/HC18/test_set/test_set/001_HC.png")
src2 = cv.imread("C:/HC18/test_set/mask/001_HC.png")
#src = cv.imread("D:/vsprojects/images/hand.jpg")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src1)

# 转换为灰度图像
gray = cv.cvtColor(src2, cv.COLOR_BGR2GRAY)
# 二值化
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
# 获取结构元素
k = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
# 开操作
binary = cv.morphologyEx(binary, cv.MORPH_OPEN, k)
cv.imshow("binary", binary)

# 轮廓发现
contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
for c in range(len(contours)):
    # 是否为凸包
    ret = cv.isContourConvex(contours[c])
    # 凸包检测
    points = cv.convexHull(contours[c])
    total = len(points)
    for i in range(len(points)):
        x1, y1 = points[i % total][0]
        x2, y2 = points[(i+1) % total][0]
        cv.circle(src1, (x1, y1), 4, (255, 0, 0), 2, 8, 0)
        cv.line(src1, (x1, y1), (x2, y2), (0, 0, 255), 2, 8, 0)
    print(points)
    print("convex : ", ret)

# 显示
cv.imshow("contours_analysis", src1)
cv.imwrite("D:/vsprojects/images/contours_analysis.png", src1)
cv.waitKey(0)
cv.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

三、结果

1.原始图像

在这里插入图片描述
在这里插入图片描述

2.模板图像

在这里插入图片描述
在这里插入图片描述

3.结果图像

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/79027
推荐阅读
相关标签
  

闽ICP备14008679号