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 Web框架Flask中使用七牛云存储实例
Feb 08 Python
Python数组定义方法
Apr 13 Python
简单了解Python中的几种函数
Nov 03 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
pip指定python位置安装软件包的方法
Jul 12 Python
python getpass实现密文实例详解
Sep 24 Python
python实现取余操作的简单实例
Aug 16 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 Python
利用python汇总统计多张Excel
Sep 22 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
pytorch实现线性回归以及多元回归
Apr 11 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 图片上传代码
2011/09/13 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
php中关于换行的实例写法
2019/09/26 PHP
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
js实现简易ATM功能
2020/10/27 Javascript
js实现日历
2020/11/07 Javascript
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
幼师自荐信
2013/10/26 职场文书
校运会口号
2014/06/18 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
学习党代会心得体会
2014/09/05 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
见习报告怎么写
2014/10/31 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
React 高阶组件HOC用法归纳
2021/06/13 Javascript