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调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
python 获取当天每个准点时间戳的实例
May 22 Python
对pandas中Series的map函数详解
Jul 25 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
树莓派与PC端在局域网内运用python实现即时通讯
Jun 22 Python
使用python的pandas为你的股票绘制趋势图
Jun 26 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
使用python求解二次规划的问题
Feb 29 Python
Python文字截图识别OCR工具实例解析
Mar 05 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
Python爬取梨视频的示例
2021/01/29 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
平民服装店创业计划书
2014/01/17 职场文书
万年牢教学反思
2014/02/15 职场文书
校园广播稿100字
2014/10/06 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
优化Mysql查询的示例
2022/04/26 MySQL