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 urlopen()函数 示例分享
Jun 12 Python
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
Python中operator模块的操作符使用示例总结
Jun 28 Python
python简单读取大文件的方法
Jul 01 Python
Python实现抢购IPhone手机
Feb 07 Python
python将回车作为输入内容的实例
Jun 23 Python
pycharm 将python文件打包为exe格式的方法
Jan 16 Python
pip指定python位置安装软件包的方法
Jul 12 Python
python 两个数据库postgresql对比
Oct 21 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
Python3如何使用tabulate打印数据
Sep 25 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 resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
js tab效果的实现代码
2009/12/26 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
javascript self对象使用详解
2016/10/18 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
python发送邮件接收邮件示例分享
2014/01/21 Python
python实现的阳历转阴历(农历)算法
2014/04/25 Python
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
python推导式的使用方法实例
2021/02/28 Python
台湾最大网路书店:博客来
2018/03/18 全球购物
什么是会话Bean
2015/05/14 面试题
一名毕业生的自我鉴定
2013/12/04 职场文书
办公室内勤岗位职责范本
2013/12/09 职场文书
土木建筑学生自我评价
2014/01/14 职场文书
出纳试用期自我评价
2015/03/10 职场文书
2015年教务主任工作总结
2015/07/22 职场文书