OpenCV图像处理技术(Python)——凸包
发布日期:2021-06-29 04:43:48 浏览次数:5 分类:技术文章

本文共 1306 字,大约阅读时间需要 4 分钟。

©FuXianjun

凸包就是完全包含原有轮廓,并且仅由轮廓上的点所构成的多边形。


一、凸包绘制

  1. 获取凸包
cv2.convexHull( points[, clockwise[, returnPoints]] )points: 轮廓;clockwise:布尔型值;returnPoints:布尔型值。
  1. 通过代码将下列图片进行凸包绘制
    在这里插入图片描述
import cv2# 读取图片并转至灰度模式img = cv2.imread('contours2.png', 1)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 图片轮廓contours, hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)cnt = contours[0]# 寻找凸包并绘制凸包(轮廓)hull = cv2.convexHull(cnt)cv2.polylines(img,[hull],True,(255,0,0),2)# 显示图片cv2.imshow('line', img)cv2.waitKey()cv2.destroyAllWindows()

运行结果如下:

在这里插入图片描述

二、凸包检测

  1. 将下列图片进行凸包检测:
    在这里插入图片描述
    完整代码如下:
import cv2# 读取图片并转至灰度模式img = cv2.imread('hand.png', 1)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化ret, binary = cv2.threshold(gray, 60, 255, cv2.THRESH_BINARY)# 图片轮廓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=icnt = 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.imshow('line', img)cv2.waitKey(0)cv2.destroyAllWindows()

运行结果为:

在这里插入图片描述

转载地址:https://blog.csdn.net/zhanghao139/article/details/117599886 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android Activity各种情况下的生命周期分析总结
下一篇:OpenCV图像处理技术(Python)——几何变换

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月26日 16时20分16秒