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实现通过pil模块对图片格式进行转换的方法
Mar 24 Python
python关闭windows进程的方法
Apr 18 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python操作xlsx文件的包openpyxl实例
May 03 Python
Python异常处理知识点总结
Feb 18 Python
python 定时器,轮询定时器的实例
Feb 20 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
python之pexpect实现自动交互的例子
Jul 25 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
python批量生成条形码的示例
Oct 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
用PHP连接Oracle数据库
2006/10/09 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
PHP 身份证号验证函数
2009/05/07 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
JavaScript继承方式实例
2010/10/29 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
简明 Python 基础学习教程
2007/02/08 Python
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
python中图像通道分离与合并实例
2020/01/17 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
团员学习总结的自我评价范文
2013/10/14 职场文书
年终考核评语
2014/01/19 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
支部组织生活会方案
2014/06/10 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
在python中读取和写入CSV文件详情
2022/06/28 Python