Python实现图片查找轮廓、多边形拟合、最小外接矩形代码


Posted in Python onJuly 14, 2020

1、概述

经常用到轮廓查找和多边形拟合等opencv操作,因此记录以备后续使用。本文代码中的阈值条件对图片没有实际意义,仅仅是为了测试。

原图为:

Python实现图片查找轮廓、多边形拟合、最小外接矩形代码

2、测试代码:

import cv2
import numpy as np

img = cv2.imread('/home/yasin/coffe.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

_, contours, hierarchy = cv2.findContours(img_gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(img, contours, -1, (255, 0, 255), 1)
cv2.namedWindow('Result of drawContours', 0)
cv2.imshow('Result of drawContours', img)
cv2.waitKey()

cnt = 0
for i in range(len(contours)):
 arclen = cv2.arcLength(contours[i], True)
 epsilon = max(3, int(arclen * 0.02)) # 拟合出的多边形与原轮廓最大距离,可以自己设置,这里根据轮廓周长动态设置
 approx = cv2.approxPolyDP(contours[i], epsilon, False) # 轮廓的多边形拟合
 area = cv2.contourArea(contours[i]) # 计算面积
 rect = cv2.minAreaRect(contours[i])
 box = np.int0(cv2.boxPoints(rect)) # 计算最小外接矩形顶点
 h = int(rect[1][0])
 w = int(rect[1][1])
 if min(h, w) == 0:
 ration = 0
 else:
 ration = max(h,w) /min(h,w) # 长宽比

 # 对长宽比,轮廓面积,拟合出的多边形顶点数做筛选
 if ration < 10 and area > 20 and area < 4000 and approx.shape[0] > 3 :
 # 对满足条件的轮廓画出轮廓的拟合多边形
 cv2.polylines(img, [approx], True, (0, 255, 0), 1)

cv2.namedWindow('Result of filtered', 0)
cv2.imshow('Result of filtered', img)
cv2.waitKey()

画出的所有轮廓:

Python实现图片查找轮廓、多边形拟合、最小外接矩形代码

在原轮廓基础上画出筛选后的轮廓(绿色部分,没有实际意义):

Python实现图片查找轮廓、多边形拟合、最小外接矩形代码

补充知识:OpenCV python 轮廓(连通域)最小外接圆形

原图:[cc.jpg]

Python实现图片查找轮廓、多边形拟合、最小外接矩形代码

import cv2
import numpy as np

def main():

  # 1.导入图片
  img_src = cv2.imread("cc.jpg")

  # 2.灰度化,二值化
  img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)
  ret, img_bin = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)

  # 3.连通域分析
  img_bin, contours, hierarchy = cv2.findContours(img_bin,
                 cv2.RETR_LIST,
                 cv2.CHAIN_APPROX_SIMPLE)

  # 4.获取最小外接圆 圆心 半径
  center, radius = cv2.minEnclosingCircle(contours[0])
  center = np.int0(center)

  # 5.绘制最小外接圆
  img_result = img_src.copy()
  cv2.circle(img_result, tuple(center), int(radius), (255, 255, 255), 2)

  # 6.显示结果图片
  cv2.imshow("img_src", img_src)
  cv2.imshow("img_result", img_result)

  cv2.waitKey()
  cv2.destroyAllWindows()

if __name__ == '__main__':
  main()

处理结果:[img_sult.jpg]

Python实现图片查找轮廓、多边形拟合、最小外接矩形代码

以上这篇Python实现图片查找轮廓、多边形拟合、最小外接矩形代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用Socket(Https)Post登录百度的实现代码
May 18 Python
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
从零学Python之入门(三)序列
May 25 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
Python中max函数用于二维列表的实例
Apr 03 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
Django框架设置cookies与获取cookies操作详解
May 27 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
python批量生成条形码的示例
Oct 10 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 #Python
python如何写try语句
Jul 14 #Python
Python操作MySQL数据库的示例代码
Jul 13 #Python
Python基于正则表达式实现计算器功能
Jul 13 #Python
python输出结果刷新及进度条的实现操作
Jul 13 #Python
python实现图像外边界跟踪操作
Jul 13 #Python
Python实现打包成库供别的模块调用
Jul 13 #Python
You might like
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
php实现的生成排列算法示例
2019/07/25 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
使用C++扩展Python的功能详解
2018/01/12 Python
图解Python变量与赋值
2018/04/03 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
投标售后服务承诺书
2015/04/29 职场文书
小学教代会开幕词
2016/03/04 职场文书
实习报告怎么写
2019/06/20 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android
SQL Server内存机制浅探
2022/04/06 SQL Server
Python OpenGL基本配置方式
2022/05/20 Python