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自动化测试之setUp与tearDown实例
Sep 28 Python
Python实现去除代码前行号的方法
Mar 10 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
Python文件操作基本流程代码实例
Dec 11 Python
flask-restful使用总结
Dec 04 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
详解Python requests 超时和重试的方法
Dec 18 Python
Python3 元组tuple入门基础
Feb 09 Python
深入浅析python变量加逗号,的含义
Feb 22 Python
python 工具 字符串转numpy浮点数组的实现
Mar 14 Python
python -v 报错问题的解决方法
Sep 15 Python
Python可视化工具如何实现动态图表
Oct 23 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
twig模板常用语句实例小结
2016/02/04 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python实现中文转换url编码的方法
2016/06/14 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
python二进制文件的转译详解
2019/07/03 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
英国网上超市:Ocado
2020/03/05 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
企业行政文员岗位职责
2013/12/03 职场文书
中国好声音广告词
2014/03/18 职场文书
学校师德承诺书
2014/05/23 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
卖车协议书范例
2014/09/16 职场文书
介绍信的写法
2015/01/31 职场文书
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang