• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python中OpenCV实现查找轮廓的实例

python 搞代码 4年前 (2022-01-08) 21次浏览 已收录 0个评论
文章目录[隐藏]

本文将结合实例代码,介绍 OpenCV 如何查找轮廓、获取边界框。具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文将结合实例代码,介绍 OpenCV 如何查找轮廓、获取边界框。

代码: contours.py

OpenCV 提供了 findContours 函数查找轮廓,需要以二值化图像作为输入、并指定些选项调用即可。

我们以下图作为示例:

二值化图像

代码工程 data/ 提供了小狗和红球的二值化掩膜图像:

其使用预训练好的实例分割模型来生成的,脚本可见 detectron2_seg_threshold.py。模型检出来源gaodaimacom搞#代%码网结果,如下:

模型用的 Mask R-CNN 已有预测边框。但其他模型会有只出预测掩膜的,此时想要边框就可以使用 OpenCV 来提取。

本文代码也提供了根据色域来获取红球掩膜的办法:

 import cv2 as cv import numpy as np # 读取图像 img = cv.imread(args.image, cv.IMREAD_COLOR) # HSV 阈值,获取掩膜 def _threshold_hsv(image, lower, upper): hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV) mask = cv.inRange(hsv, lower, upper) result = cv.bitwise_and(image, image, mask=mask) return result, mask _, thres = _threshold_hsv(img, np.array([0,110,190]), np.array([7,255,255])) # 清除小点(可选) kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3), (1, 1)) thres = cv.morphologyEx(thres, cv.MORPH_OPEN, kernel)

查找轮廓

 # 查找轮廓 #  cv.RETR_EXTERNAL: 只查找外部轮廓 contours, hierarchy = cv.findContours( threshold, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) # 近似轮廓,减点(可选) contours_poly = [cv.approxPolyDP(c, 3, True) for c in contours] # 绘制轮廓 h, w = threshold.shape[:2] drawing = np.zeros((h, w, 3), dtype=np.uint8) for i in range(len(contours)): cv.drawContours(drawing, contours_poly, i, (0, 255, 0), 1, cv.LINE_8, hierarchy)

获取边界框

boundingRect 获取边界框,并绘制:

 for contour in contours_poly: rect = cv.boundingRect(contour) cv.rectangle(drawing, (int(rect[0]), int(rect[1])), (int(rect[0]+rect[2]), int(rect[1]+rect[3])), (0, 255, 0), 2, cv.LINE_8)

minEnclosingCircle 获取边界圈,并绘制:

 for contour in contours_poly: center, radius = cv.minEnclosingCircle(contour) cv.circle(drawing, (int(center[0]), int(center[1])), int(radius), (0, 255, 0), 2, cv.LINE_8)

参考

OpenCV Tutorials / Image Processing

以上就是Python中OpenCV实现查找轮廓的实例的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python中OpenCV实现查找轮廓的实例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址