1、概述

经常用到轮廓查找和多边形拟合等opencv操作,因此记录以备后续使用。本文代码中的阈值条件对图片没有实际意义,仅仅是为了测试。

原图为:

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()

画出的所有轮廓:

在原轮廓基础上画出筛选后的轮廓(绿色部分,没有实际意义):

补充知识:OpenCV python 轮廓(连通域)最小外接圆形

原图:[cc.jpg]

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实现图片查找轮廓、多边形拟合、最小外接矩形代码

本文地址: http://www.cppcns.com/jiaoben/python/325164.html

python外包凹多边形生成_Python实现图片查找轮廓、多边形拟合、最小外接矩形代码...相关推荐

  1. opencv 轮廓查找, 凸包,最小外接矩形,最小外接圆,最小外接椭圆

    本章内容: 1. 轮廓查找 2. 绘制轮廓 3. 凸包 4.最小外接矩形 5.最小外接圆 6.最小外接椭圆 1.搜索轮廓 2.绘制轮廓 输出结果 3.凸包 输出结果 4.最小外接矩形 输出结果 5.最 ...

  2. python opencv最小外接矩形_Opencv绘制最小外接矩形、最小外接圆

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...

  3. Python图片查找轮廓、多边形拟合、最小外接矩形操作实例

    1.概述 经常用到轮廓查找和多边形拟合等opencv操作,因此记录以备后续使用.本文代码中的阈值条件对图片没有实际意义,仅仅是为了测试. 原图为:                            ...

  4. python如何做四象图_Python使用四个坐标点来剪切图像目标区域的最小外接矩形,python,利用,对,图片,进行,裁剪...

    在图像裁剪操作中,opencv和pillow两个库都具有相应的函数,但是这两个库中的函数仅仅能对与图片平行的矩形进行裁剪操作,如果想要对目标的最小外接矩形进行裁剪该如何操作呢?如下所示: 具体处理该问 ...

  5. python 提取最小外接矩形_python给人脸带上口罩(简单版)

    导读 因为目前公开的口罩人脸数据比较少,如果想训练一个口罩人脸识别模型,必须依赖大量的人脸数据.为了收集到更多的口罩人脸数据,我们只能利用已有的公开人脸数据上通过程序来模拟人脸带口罩.这篇文章向大家介 ...

  6. python+opencv获取最小外接矩形

    python+opencv获取最小外接矩形 环境 代码 效果 环境 python版本:3.8 opencv版本:4.3.0.36 代码 from PIL import Image from pylab ...

  7. cv2.minAreaRect() 生成最小外接矩形

    简介 使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数. 1 cv2.m ...

  8. python 最小外接矩形笔记

    目录 opencv生成最小外接矩形: 最小外接矩形修正版: opencv生成最小外接矩形: cnt = np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]]) # 必须 ...

  9. python抓取图片数字_python实现图片处理和特征提取详解

    这是一张灵异事件图...开个玩笑,这就是一张普通的图片. 毫无疑问,上面的那副图画看起来像一幅电脑背景图片.这些都归功于我的妹妹,她能够将一些看上去奇怪的东西变得十分吸引眼球.然而,我们生活在数字图片 ...

最新文章

  1. Shell中NR/NF的意义
  2. mysql 关于日期时间的字段类型
  3. c++ 多重背包状态转移方程_串讲:控制理论:全状态反馈控制(FSFB)
  4. linux中怎么安装ypak软件包,Linux 124课程 13、安装和升级软件包
  5. hash 数据类型的应用场景
  6. python2协程_python中的协程(二)
  7. Java Observer Pattern(观察者模式)
  8. mysql测试数据图表_mysql测试数据表
  9. 软考信息系统项目管理师_管理科学(运筹学)2---软考高级之信息系统项目管理师034
  10. 揭秘Harbor镜像仓库——首个源自中国的CNCF毕业项目
  11. react diff算法剖析总结
  12. 动态加载执行 JS 文件、对话框 confirm 方法
  13. hilbert滤波器 matlab,用MATLAB实现Hilbert变换
  14. Handler机制原理----全解
  15. Leetcode 75. 颜色分类
  16. 【NLP】LSTM 唐诗生成器 pytorch 版
  17. 大学生面试20个经典问题及回答思路!
  18. Facebook将对视频进行人物识别及身份标注
  19. 直接修改class文件的方式
  20. nginx动态黑名单功能

热门文章

  1. medfilt2 matlab,Matlab实现medfilt2函数功能
  2. 博图SCL编程——提升代码界面的美观性和易读性
  3. 用命令提示符创建Sqlite数据库
  4. android虹软人脸识别简书,基于虹软人脸识别API和Qt5的人脸识别
  5. spring security 会话管理
  6. 用selenium对svg标签的定位方法
  7. 域名被微信封了 解决办法
  8. C语言中exit(0) 、exit(1) 和return的区别
  9. 【机器视觉锁付整体解决方案】用户主界面CCD参数设置
  10. 安装ansys的mpi