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 相关文章推荐
Flask框架的学习指南之开发环境搭建
Nov 20 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
Python numpy 点数组去重的实例
Apr 18 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
python 字段拆分详解
Dec 17 Python
Opencv求取连通区域重心实例
Jun 04 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
python库Tsmoothie模块数据平滑化异常点抓取
Jun 10 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中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
php 数组元素快速去重
2017/05/05 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
Javascript的并行运算实现代码
2010/11/19 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
2016/10/21 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
如何使用angularJs
2017/05/08 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
对Python 数组的切片操作详解
2018/07/02 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
生产厂厂长岗位职责
2013/12/25 职场文书
会议通知
2015/04/15 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
小爸爸观后感
2015/06/15 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
python绘制云雨图raincloud plot
2022/08/05 Python
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android