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中__call__方法示例分析
Oct 11 Python
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
python if not in 多条件判断代码
Sep 21 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
Python中openpyxl实现vlookup函数的实例
Oct 28 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
pytorch 使用半精度模型部署的操作
May 24 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自动重命名文件实现方法
2014/11/04 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PDO::setAttribute讲解
2019/01/29 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
js模拟百度模糊搜索的实例
2017/08/04 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
使用Pytorch来拟合函数方式
2020/01/14 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
Python tkinter和exe打包的方法
2020/02/05 Python
Python计算IV值的示例讲解
2020/02/28 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
医院护理人员的自我评价分享
2013/10/04 职场文书
先进集体事迹材料
2014/02/17 职场文书
考博专家推荐信
2014/05/10 职场文书
2014年党小组工作总结
2014/12/20 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
入党后的感想
2015/08/10 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技