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 相关文章推荐
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
python脚本爬取字体文件的实现方法
Apr 29 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
python pygame实现五子棋小游戏
Oct 26 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 Python
Python 爬虫的原理
Jul 30 Python
Python面向对象多态实现原理及代码实例
Sep 16 Python
python编写扎金花小程序的实例代码
Feb 23 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
JavaScript 数组详解
2013/10/10 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
Python OS模块实例详解
2019/04/15 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
通过Turtle库在Python中绘制一个鼠年福鼠
2020/02/03 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
超市端午节活动方案
2014/01/23 职场文书
入党积极分子评语
2014/05/04 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS