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中操作字典之setdefault()方法的使用
May 21 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
在django中,关于session的通用设置方法
Aug 06 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
flask利用flask-wtf验证上传的文件的方法
Jan 17 Python
150行python代码实现贪吃蛇游戏
Apr 24 Python
Python 高效编程技巧分享
Sep 10 Python
python 利用toapi库自动生成api
Oct 19 Python
如何一键升级Python所有包
Nov 05 Python
python实现简单聊天功能
Jul 07 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
PHP4实际应用经验篇(9)
2006/10/09 PHP
基于empty函数的判断详解
2013/06/17 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
2010年最佳jQuery插件整理
2010/12/06 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
Python全局变量操作详解
2015/04/14 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
Python jieba库用法及实例解析
2019/11/04 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
python中yield的用法详解
2021/01/13 Python
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
活动总结怎么写啊
2014/05/07 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
法定代表人证明书
2014/11/28 职场文书
四年级小学生评语
2014/12/26 职场文书
2015年车间主任工作总结
2015/05/21 职场文书