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用fork来创建子进程注意事项
Jul 03 Python
Python对象的深拷贝和浅拷贝详解
Aug 25 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
python+ffmpeg批量去视频开头的方法
Jan 09 Python
Python读取stdin方法实例
May 24 Python
python动态进度条的实现代码
Jul 03 Python
详解python中的index函数用法
Aug 06 Python
使用django自带的user做外键的方法
Nov 30 Python
python爬虫中抓取指数的实例讲解
Dec 01 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
MySQL数据源表结构图示
2008/06/05 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
JQuery each()嵌套使用小结
2014/04/18 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
layui实现table加载的示例代码
2018/08/14 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
python获取Linux下文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python多线程编程简单介绍
2015/04/13 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
初入社会应届生求职信
2013/11/18 职场文书
个人作风剖析材料
2014/02/02 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
小学评语大全
2014/04/22 职场文书
创业女性典型材料
2014/05/02 职场文书
装饰公司活动策划方案
2014/08/23 职场文书
科学发展观演讲稿
2014/09/11 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
工作后的感想
2015/08/07 职场文书
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏
Java获取字符串编码格式实现思路
2022/09/23 Java/Android