python -opencv 边缘检测

news2024/9/21 4:32:38

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


运行结果如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Vue+SpringBoot的医院门诊预约挂号系统 开源项目

项目编号: S 033 ,文末获取源码。 \color{red}{项目编号:S033,文末获取源码。} 项目编号:S033,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2…

使用cli批量下载GitHub仓库中所有的release

文章目录 1\. 引言2\. 工具官网3\. 官方教程4\. 测试用的网址5\. 安装5.1. 使用winget安装5.2. 查看gh是否安装成功了 6\. 使用6.1. 进行GitHub授权6.1.1. 授权6.1.2. 授权成功6.2 查看指定仓库中的所有版本的release6.2.1. 默认的30个版本6.2.2. 自定义的100个版本6.3 下载特定…

华为数通HCIP 821BGP 知识点整理

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

《数据:挖掘价值,洞察未来

大数据:挖掘价值,洞察未来 我们正身处一个数据驱动的时代,大数据已经成为企业和个人决策的重要依据。本文将深入探讨大数据的魅力,挖掘其价值,并洞察未来发展趋势,让我们一起领略大数据的无穷奥秘。 一、大…

js-WebApi笔记之BOM

目录 window对象 定时器-延迟函数 location对象 navigator对象 histroy对象 本地存储 localStorage sessionStorage localStorage 存储复杂数据类型 window对象 BOM (Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象,也可以说是JavaScr…

Redis字典实现

前言 字典又称符号表,关联数组或者映射(map)。是一种保存键值对的抽象数据结构。在字典中一个键和一个值进行关联。这些关联的值被称为键值对。 字典中每一个键都是独一无二的,没有重复的。我们可以通过键来查找值,更新值或者删除整个键值对等…

svn问题集

被锁定,无法拉取提交 解决方法

基于人工水母算法优化概率神经网络PNN的分类预测 - 附代码

基于人工水母算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于人工水母算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于人工水母优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

[OpenAirInterface-01]什么是OAI?OAI在github中源代码的存放结构

文章目录 前言:什么是软件无线电SDR第1章 什么是OAI(OpenAirInterface)1.1 来自官网的概述1.2 来自github的概述1.3 来自我的解读 第2章 什么是OSA2.1 OSA概述:2.2 OSA联盟职责2.3 OpenAirInterface github成员的角色 第3章 常见的…

【运维篇】5.4 Redis 并发延迟检测

文章目录 0.前言Redis工作原理可能引起并发延迟的常见操作和命令并发延迟检测分析和解读监控数据:优化并发延迟的策略 1. 检查CPU情况2. 检查网络情况3. 检查系统情况4. 检查连接数5. 检查持久化 :6. 检查命令执行情况 0.前言 Redis 6.0版本之前其使用单…

《视觉SLAM十四讲》-- 建图

11 建图 11.1 概述 (1)地图的几类用处: 定位:导航:机器人在地图中进行路径规划;避障重建交互:人与地图之间的互动 (2)几类地图 稀疏地图稠密地图语义地图 11.2 单目…

java学习part06数组

62-数组-数组的概述_哔哩哔哩_bilibili 这篇 Java 基础,我吹不动了 - 掘金 (juejin.cn) 1.数组概念 重点 2.数组声明和初始化 new的时候要么给出静态初始化的数据{a,b,c},要么给出动态初始化指定长度 [4]。 否则报错,初始化必须确定长度…

Positive Technologies 利用 PT Cloud Application Firewall 保护中小型企业的网络资源

云产品按月订购,无需购买硬件资源 PT Cloud Application Firewall 是 Positive Technologies 推出的首个用于保护网络应用程序的商用云产品。Web 应用层防火墙 (web application firewall, WAF) 现在可以通过 技术合作伙伴——授权服务商和云提供商以订购方式提供1…

获取阿里云Docker镜像加速器

1、阿里云官网(www.aliyun.com)注册账号 2、打开“控制台首页” 控制台首页地址:https://home.console.aliyun.com/home/dashboard/ProductAndService 3、点击“概览->容器镜像服务 ACR” 4、打开“镜像工具->镜像加速器”页面&#x…

FPGA实现双向电平转换

网上搜了一圈,好像没看到的类似的中文资料,不过MicroSemi有个文档AC349上给出了完整的解决方案,还有参考代码。 话不多说,看图: 欲知详情的朋友,请参考 AC349

vue过渡,vue3组合式API详细介绍

7.过渡效果 vue提供了两个内置组件,可以帮助你制作基于状态变化的过渡和动画 Transition会在一个元素或组件进入和离开DOM时应用动画TransitionGroup会在一个v-for列表中的元素或组件被插入,移动,或移除时应用动画 7-1过渡效果 过渡模式 <Transition mode"out-in&q…

测试用例的设计方法(全):正交实验设计方法|功能图分析方法|场景设计方发

正交实验设计方法 一.方法简介 利用因果图来设计测试用例时, 作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图而得到的测试用例数目多的惊人&#xff0c;给软件测试带来沉重的负担&#xff0c;为了有效…

YOLO目标检测——无人机航拍输电线路绝缘瓷瓶数据集下载分享【对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;电力系统运维、状态监测与故障诊断、智能电网建设等领域数据集说明&#xff1a;无人机航拍输电线路绝缘瓷瓶数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量…

云计算赛项容器云2023搭建

部署容器云平台[5 分] 使 用 OpenStack 私 有 云 平 台 创 建 两 台 云 主 机 &#xff0c; 云 主 机 类 型 使 用 4vCPU/12G/100G 类型&#xff0c;分别作为 Kubernetes 集群的 Master 节点和 node 节点&#xff0c; 然后完成 Kubernetes 集群的部署&#xff0c;并完成 Istio …

Linux文件目录以及文件类型

文章目录 Home根目录 //bin/sbin/etc/root/lib/dev/proc/sys/tmp/boot/mnt/media/usr 文件类型 Home 当尝试使用gedit等编辑器保存文件时&#xff0c;系统默认通常会先打开个人用户的“家”&#xff08;home&#xff09;目录&#xff0c; 建议在通常情况下个人相关的内容也是保…