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 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
python对字典进行排序实例
Sep 25 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
Apr 20 Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
python导入模块交叉引用的方法
Jan 19 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
基于Python实现下载网易音乐代码实例
Aug 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和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
JS分页效果示例
2013/10/11 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python之Character string(实例讲解)
2017/09/25 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
购买大码女装:Lane Bryant
2016/09/07 全球购物
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
美术师范毕业生自荐信
2013/11/16 职场文书
管理站站长岗位职责
2013/11/27 职场文书
党员个人思想汇报
2013/12/28 职场文书
早读迟到检讨书
2014/01/24 职场文书
铁路个人事迹材料
2014/01/30 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python
用Python可视化新冠疫情数据
2022/01/18 Python