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解析模块(ConfigParser)使用方法
Dec 10 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
python pygame实现2048游戏
Nov 20 Python
Python全栈之列表数据类型详解
Oct 01 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
Django 限制访问频率的思路详解
Dec 24 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
python使用建议技巧分享(三)
Aug 18 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 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
详解json在php中的应用
2018/09/30 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
Django的Modelforms用法简介
2019/07/27 Python
python单例设计模式实现解析
2020/01/07 Python
python是怎么被发明的
2020/06/15 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
餐厅采购员岗位职责
2014/03/06 职场文书
培训协议书范本
2014/04/22 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
公司开除员工通知
2015/04/22 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书