您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python中OpenCV实现查找轮廓的实例

51自学网 2021-10-30 22:29:43
  python
这篇教程Python中OpenCV实现查找轮廓的实例写得很实用,希望能帮到您。

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

代码: contours.py

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

我们以下图作为示例:

二值化图像

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

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

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

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

import cv2 as cvimport 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

到此这篇关于OpenCV实现查找轮廓的实例的文章就介绍到这了,更多相关OpenCV 查找轮廓内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


python字符串的多行输出的实例详解
Django drf请求模块源码解析
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。