python -opencv 轮廓检测(多边形,外接矩形,外接圆)

python -opencv 轮廓检测(多边形,外接矩形,外接圆)

边缘检测步骤:

第一步:读取图像为灰度图
第二步:进行二值化处理
第三步:使用cv2.findContours对二值化图像提取轮廓
第三步:将轮廓绘制到图中

代码如下:

from ctypes.wintypes import SIZE
from multiprocessing.pool import IMapUnorderedIterator
import cv2
import copy
import math
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import os

path=r'D:\learn\photo\cv\res\ballon.png'

img=cv2.imread(path,1)
img_gray=cv2.imread(path,0)



def cv_show(name,img):
    cv2.imshow(name,img)
    #cv2.waitKey(0),接收0,表示窗口暂停
    cv2.waitKey(0)
    #销毁所有窗口
    cv2.destroyAllWindows()


#cv_show('img_gray',img_gray)



#进行二值化处理
ret,binary=cv2.threshold(img_gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)


#cv_show('dist',dist)

def BGR_TO_RGB(img):
    return img[:,:, ::-1];
#检测轮廓

countourClose,hierrachyclose=cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)


print("len(countourclose) is",len(countourClose))

#countourClose 轮廓坐标信息
#hierrachyclose 轮廓之间的层次结构



#背景图
result=np.zeros(img.shape,np.uint8)

#绘制轮廓边框
for  i in range(len(countourClose)):
    cnt=countourClose[i]
    #近似多边形
    #第一个参数,表示精度,单位是像素
    #第二个像素表示是否闭合
    approx=cv2.approxPolyDP(cnt,3,True)
    #绘制轮廓
    #-1表示绘制所有轮廓
    #5线条粗细

    cv2.drawContours(result,[approx],-1,(0,0,255),5)
     #绘制矩形
    x,y,w,h=cv2.boundingRect(cnt)
    cv2.rectangle(result,(x,y),(x+w,y+h),(0,255,0),5)
    #绘制最小外接圆
    (x,y),r=cv2.minEnclosingCircle(cnt)
    center=(int(x),int(y))
    r=int(r)
    cv2.circle(result,center,r,(255,255,255),5)



   
    #

plt.figure(figsize=(400,600))




print(img_gray.shape)
print(img_gray[0][0])
plt.subplot(221)
#img_gray=BGR_TO_RGB(img_gray,'gray')
plt.imshow(img_gray,'gray')
plt.title('img_gray')

plt.subplot(222)
plt.imshow(binary,'gray')
plt.title('binary')
plt.subplot(223)
plt.imshow(result,'gray')
plt.title('result')

plt.show()
os.system("pause")


运行结果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/185435.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科学上网也clone不全PX4?

一、问题 已经科学上网,下载PX4固件 git clone https://github.com/PX4/Firmware.git --recursivePX4大框架 clone 下来了,但是内部的子模块很多没有,报了很多 Fatal,例如 fatal: clone of https://github.com/px4/cyclonedds …

行情分析 - - 加密货币市场大盘走势(11.24)

大饼昨日震荡幅度很小,而今天延续昨日的空头思路。当然如果从MACD日线来看,处于上涨趋势,稳健的可以选择观望等待。空头思路是因为目前EMA21均线和EMA55均线依然保持很远,最近两个月BTC上涨40%,而最近持续保持高位很快…

16个产品经理必备的原型设计软件盘点

原型就像一幅画,比千言万语好。将产品或界面的概念转化为特定的对象是设计过程中的一个关键点,也是每个设计师创作过程的一部分。 每个设计师都应该有一个合适的原型工具。今天,将介绍18种设计原型工具,让我们看看! …

HarmonyOS ArkTS 给应用添加通知和提醒(十二)

简介 随着生活节奏的加快,我们有时会忘记一些重要的事情或日子,所以提醒功能必不可少。应用可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用,希望在指定时间点提醒用户有优惠活动。为满足此类业务诉求&#xf…

元宇宙vr线上展馆在线制作降低开发门槛和成本

让人人都拥有自己的元宇宙空间,说起来就是一个令人亢奋的消息,也是大家所期待的,VR元宇宙空间在线编辑平台是VRARAI元宇宙公司深圳华锐视点自主研发的平台,允许用户在虚拟环境中创建、设计和共享空间,操作简单&#xf…

语音合成综述Speech Synthesis

一、语音合成概述 语音信号的产生分为两个阶段,信息编码和生理控制。首先在大脑中出现某种想要表达的想法,然后由大脑将其编码为具体的语言文字序列,及语音中可能存在的强调、重读等韵律信息。经过语言的组织,大脑通过控制发音器…

探讨工业元宇宙和数字孪生的关系

就在各类技术专家还在试图设想元宇宙虚拟世界将为企业和消费者带来什么时,工业元宇宙虚拟世界已经在改变人们设计、制造以及与各行业物理实体互动的方式。尽管元宇宙的定义比比皆是,工业元宇宙将如何发展还有待观察,但数字孪生越来越多地被视…

C#学习相关系列之base和this的常用方法

一、base的用法 Base的用法使用场景主要可以概括为两种: 1 、访问基类方法 2、 调用基类构造函数 使用要求:仅允许用于访问基类的构造函数、实例方法或实例属性访问器。从静态方法中使用 base 关键字是错误的。所访问的基类是类声明中指定的基类。 例如&…

iview/view-design+vue2实现表单校验

1.iview/view-design介绍 iview是一款基于Vue.js的开源UI组件库,提供了丰富的组件和样式,支持响应式布局和多语言环境。它使用了最新的前端技术,如ES6、Webpack和SASS,让开发者可以快速构建高质量的Web应用程序。 View-design是一…

python+requests+pytest+allure自动化框架

1.核心库 requests request请求 openpyxl excel文件操作 loggin 日志 smtplib 发送邮件 configparser unittest.mock mock服务 2.目录结构 base utils testDatas conf testCases testReport logs 其他 2.1base base_path.py 存放绝对路径,dos命令或Jenkins执行…

渗透测试信息搜集

注:太简陋了,不忍直视 渗透测试信息收集 黑盒测试:给域名 灰盒测试:给域名、账户(或密码) 白盒测试:给域名、账户、密码 授权书 对安全公司进行授权 攻防演习 是对个人进行授权 渗透测试:&#xff0…

2023快速成为接口测试高手:实用指南!

大量线上BUG表明,对接口进行测试可以有效提升产品质量,暴露手工测试时难以发现的问题,同时也能缩短测试周期,提升测试效率。但在实际执行过程中,接口测试被很多同学打上了“上手难,门槛高”的标签。 本文旨…

游戏测试大揭秘,帮你轻松过关!

游戏测试可以看作是软件测试的一个分支,黑盒测试最基本的要求是会玩游戏。小公司会要求测试能力更加全面的员工,其中除了功能测试还要会性能测试,兼容测试,弱网测试,自动化测试等。 游戏测试是游戏开发过程中必不可少…

系列九、声明式事务(xml方式)

一、概述 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的一种方式,Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,是指在配置文件中声明,用在Spring配置文件中声明式的处理事务来…

stack和queue

目录 stack 介绍 头文件 简单使用 constructor empty size top push pop swap 使用 queue 介绍 头文件 简单使用 constructor empty size front back push pop swap 使用 stack 介绍 栈 先进后出 头文件 #include <stack> 简单使用 constru…

ELK+kafka+filebeat企业内部日志分析系统

1、组件介绍 1、Elasticsearch&#xff1a; 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布…

Fiddler 无法抓包手机 https 报文的解决方案来啦!!

解决手机https无法抓包的问题 当你测试App的时候&#xff0c;想要通过Fiddler/Charles等工具抓包看下https请求的数据情况&#xff0c;发现大部分的App都提示网络异常/无数据等等信息 这时候怎么解决呢&#xff1f; 以软件测试面试提刷题APP为例&#xff1a; Fiddler上的显示…

微信 H5 中实现客服功能的几种方式

微信 H5 中实现客服功能的几种方式 本文主要针对微信网页 H5 中的客服功能 一、使用微信客服接口及对话界面 服务号消息客服&#xff0c;当用户和公众号产生特定动作的交互时&#xff08;用户发送信息/点击自定义菜单/关注公众号/扫描二维码&#xff09;&#xff0c;微信将会…

rancher2.6 docker版本部署

1. 拉取镜像 docker pull rancher/rancher:v2.6.5 注&#xff1a; 上面命令中rancher的版本v2.6.5&#xff0c;仅仅是我因为我们环境中使用的k8s都是 1.20.1 到1.23.6 之间的版本。rancher支持的k8s版本&#xff0c;在github上查看&#xff1a;Release Release v2.6.5 ranche…

2048 数字合成大作战,Android小游戏开发

A. 项目描述 《2048》是一款经典的益智小游戏&#xff0c;它的目标是通过合并相同数字来达到2048这个最高分。 该游戏规则简单&#xff0c;玩家需要通过滑动屏幕来移动方块&#xff0c;相同数字的方块会合并成一个新的数字方块。这样的简单操作让人可以轻松上手。 《2048》小…