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 httplib,smtplib使用方法
Sep 06 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
Pyinstaller将py打包成exe的实例
Mar 31 Python
TensorFlow实现卷积神经网络
May 24 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
python实现超市商品销售管理系统
Oct 25 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
用Python开发app后端有优势吗
Jun 29 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 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 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
JavaScript异步上传图片文件的实例代码
2017/07/04 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
python实现年会抽奖程序
2019/01/22 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
Python的pygame安装教程详解
2020/02/10 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
教师岗位职责范本
2013/12/29 职场文书
党组织公开承诺书
2014/03/29 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
销售队伍口号
2014/06/11 职场文书
业务员岗位职责范本
2015/04/03 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
企业管理不到位检讨书
2019/06/27 职场文书