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


Posted in Python onJune 08, 2021

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

代码: contours.py

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

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

我们以下图作为示例:

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

二值化图像

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

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

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

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

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

模型用的 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)

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

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)

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

参考

OpenCV Tutorials / Image Processing

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

Python 相关文章推荐
Python方法的延迟加载的示例代码
Dec 18 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
Win8下python3.5.1安装教程
Jul 29 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
详解python配置虚拟环境
Apr 08 Python
python3 深浅copy对比详解
Aug 12 Python
python应用文件读取与登录注册功能
Sep 23 Python
利用python画出AUC曲线的实例
Feb 28 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
PyMongo 查询数据的实现
Jun 28 Python
python如何为list实现find方法
May 30 Python
python字符串的多行输出的实例详解
Jun 08 #Python
Python机器学习之基于Pytorch实现猫狗分类
Python中json.load()和json.loads()有哪些区别
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 #Python
OpenCV-Python直方图均衡化实现图像去雾
OpenCV-Python实现人脸磨皮算法
Python实现拼音转换
You might like
2014过年倒计时示例
2014/01/31 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
Python数据类型之List列表实例详解
2019/05/08 Python
python实现动态数组的示例代码
2019/07/15 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
python-numpy-指数分布实例详解
2019/12/07 Python
python super用法及原理详解
2020/01/20 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
春节请假条
2014/04/11 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
出纳岗位职责
2015/01/31 职场文书
讲座新闻稿
2015/07/18 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
Python制作春联的示例代码
2022/01/22 Python
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers