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 相关文章推荐
Python3读取zip文件信息的方法
May 22 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 Python
名片管理系统python版
Jan 11 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
django ManyToManyField多对多关系的实例详解
Aug 09 Python
python 变量初始化空列表的例子
Nov 28 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
python 制作本地应用搜索工具
Feb 27 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
Jun 07 Python
Python开发简易五子棋小游戏
May 02 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
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
在Python中使用判断语句和循环的教程
2015/04/25 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
python使用Tesseract库识别验证
2018/03/21 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
Python for循环与getitem的关系详解
2020/01/02 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
Python如何重新加载模块
2020/07/29 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
HTML5地理定位实例
2014/10/15 HTML / CSS
C语言如何决定使用那种整数类型
2016/11/26 面试题
冬季安全检查方案
2014/05/23 职场文书
如何写早恋检讨书
2014/09/10 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
清洁员岗位职责
2015/02/15 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript
高通2023 年将发布高性能PC处理器
2022/04/29 数码科技