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实现的tab文件操作类分享
Nov 20 Python
微信跳一跳小游戏python脚本
Jan 05 Python
python删除服务器文件代码示例
Feb 09 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
Django admin组件的使用
Oct 24 Python
python实现图片批量压缩
Apr 24 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 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会话(Session)实现用户登陆功能
2013/06/29 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
总结JavaScript三种数据存储方式之间的区别
2016/05/03 Javascript
jquery.validate使用详解
2016/06/02 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
微信小程序实现简单表格
2019/02/14 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
python实现的各种排序算法代码
2013/03/04 Python
python脚本监控docker容器
2016/04/27 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
python自动生成证件号的方法示例
2021/01/14 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
思想品德自我鉴定
2013/10/12 职场文书
自考毕业生自我鉴定
2013/11/04 职场文书
太太口服液广告词
2014/03/20 职场文书
开发房地产协议书
2014/09/14 职场文书
电话营销开场白
2015/05/29 职场文书
集结号观后感
2015/06/08 职场文书
公司车队管理制度
2015/08/04 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL