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下使用Psyco模块优化运行速度
Apr 05 Python
python实现备份目录的方法
Aug 03 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
简单的python后台管理程序
Apr 13 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
Python3字符串encode与decode的讲解
Apr 02 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 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
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
iview的table组件自带的过滤器实现
2019/07/12 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
Python提取网页中超链接的方法
2016/09/18 Python
pandas多级分组实现排序的方法
2018/04/20 Python
实例讲解Python爬取网页数据
2018/07/08 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
python使用建议与技巧分享(二)
2020/08/17 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
哈理工毕业生的求职信
2013/12/22 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
《秋思》教学反思
2016/02/23 职场文书