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翻译软件实现代码(使用google api完成)
Nov 26 Python
python抓取京东价格分析京东商品价格走势
Jan 09 Python
Python创建xml的方法
Mar 10 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
python实现滑雪游戏
Feb 22 Python
python 实现PIL模块在图片画线写字
May 16 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
Python中pass的作用与使用教程
Nov 13 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 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连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
js实现随机点名
2021/01/19 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
详解Python中的序列化与反序列化的使用
2015/06/30 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
python实现从wind导入数据
2019/12/03 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
Python列表如何更新值
2020/05/27 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
研究生自我鉴定范文
2013/10/30 职场文书
毕业生求职自荐信怎么写
2014/01/08 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL
Golang并发工具Singleflight
2022/05/06 Golang