当前位置: 首页 > news >正文

opencv-python 分离边缘粘连的物体(距离变换)

请添加图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import cv2
import numpy as np# 读取图像,这里添加了判断图像是否读取成功的逻辑
img = cv2.imread("./640.png")
# 灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯模糊
gray = cv2.GaussianBlur(gray, (5, 5), 0)
# 二值化
ret, binary = cv2.threshold(gray, 115, 255, cv2.THRESH_BINARY)
kernel = np.ones((5, 5), np.uint8)
# 开运算
binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=1)cv2.imshow('thres', binary)
cv2.waitKey(0)
cv2.destroyAllWindows()# 距离变换
dist = cv2.distanceTransform(binary, cv2.DIST_L2, 3)
# 对二值图像进行距离变换操作,使用cv2.distanceTransform函数,计算图像中每个非零像素到最近的零像素的距离,
# 参数cv2.DIST_L2表示使用欧几里得距离(也可以选择其他距离度量方式),参数3表示距离变换的掩码大小,
# 得到的dist结果是一个单通道图像,其像素值表示对应的距离信息,该操作常用于图像分割等场景中,帮助区分不同区域的边界等。dist_out = cv2.normalize(dist, 0, 1.0, cv2.NORM_MINMAX)
# 对距离变换得到的图像进行归一化处理,使用cv2.normalize函数,将像素值归一化到0到1.0的范围,
# 方便后续基于归一化后的距离值进行阈值处理等操作,采用cv2.NORM_MINMAX归一化类型,表示将最小值映射到0,最大值映射到1.0。cv2.imshow('distance-Transform', dist_out*100)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 显示归一化后的距离变换图像,为了更直观地查看距离信息,将归一化后的图像像素值乘以100进行放大显示(只是为了视觉效果更好,ret, surface = cv2.threshold(dist_out, (0.35 * dist_out.max()), 255, cv2.THRESH_BINARY)
# 对归一化后的距离变换图像进行阈值处理,确定图像中的前景区域,这里使用cv2.threshold函数,
# 注意阈值参数的计算,先通过(0.35 * dist_out.max())计算出具体的阈值数值(原代码此处计算方式有误,需先算出具体值再传入函数),
# 大于该阈值的像素设置为255(白色),表示属于前景区域,小于等于该阈值的像素设置为0(黑色),处理后的图像surface表示初步确定的前景区域。print(surface)
cv2.imshow('123', surface)
cv2.waitKey(0)
cv2.destroyAllWindows()# 乘回来、转格式、
img_1 = (surface*255).astype(np.uint8)
# 轮廓查询
# print(cv2.RETR_LIST, cv2.RETR_EXTERNAL, cv2.RETR_CCOMP, cv2.RETR_TREE)
contours, hierarchy = cv2.findContours(img_1, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)for cnt in contours:# 精准绘制轮廓cv2.drawContours(img, [cnt], -1, (0, 255, 0), 1)cv2.imshow('1', img)
cv2.waitKey(0)

相关文章:

opencv-python 分离边缘粘连的物体(距离变换)

import cv2 import numpy as np# 读取图像,这里添加了判断图像是否读取成功的逻辑 img cv2.imread("./640.png") # 灰度图 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯模糊 gray cv2.GaussianBlur(gray, (5, 5), 0) # 二值化 ret, binary cv2…...

机器学习杂笔记1:类型-数据集-效果评估-sklearn-机器学习算法分类

文章目录 1.类型2.数据集3.效果评估4.sklearn5.sklearn机器学习算法七种数据分析方法1.对比分析2.细分分析3.A/B测试 (单一变量分析)4.漏斗分析5.留存分析6.相关分析7.聚类分析 1.类型 【1】监督学习:从成对的已经标记好的输入和输出经验数据…...

Django+Nginx+uwsgi网站使用Channels+redis+daphne实现简单的多人在线聊天及消息存储功能

网站部署在华为云服务器上,Debian系统,使用DjangoNginxuwsgi搭建。最终效果如下图所示。 一、响应逻辑顺序 1. 聊天页面请求 客户端请求/chat/(输入聊天室房间号界面)和/chat/room_name(某个聊天室页面)链…...

数据结构在二叉树Oj中利用子问题思路来解决问题

二叉树Oj题 获取二叉树的节点数获取二叉树的终端节点个数获取k层节点的个数获取二叉树的高度检测为value的元素是否存在判断两颗树是否相同判断是否是另一棵的子树反转二叉树判断一颗二叉树是否是平衡二叉树时间复杂度O(n*n)复杂度O(N) 二叉树的遍历判断是否是对称的二叉树二叉…...

华为openEuler考试真题演练(附答案)

【单选题】 以下关于互联网的描述,哪个选项是正确的? A:Nginx 在万维网中可以作为 ftp 服务器的反向代理,并与ftp服务器的数量--对应 B:Nginx 在互联网中可以作为 web服务器端,成为万维网的一个节点 C:互联网上的的资源需使用 Nginx进行七层…...

生成自签名证书并配置 HTTPS 使用自签名证书

生成自签名证书 1. 运行 OpenSSL 命令生成证书和私钥 在终端中输入以下命令,生成自签名证书和私钥文件: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self_signed.key -out self_signed.pem-x509:生成自签名证书。…...

物联网核心安全系列——智能汽车安全防护的重要性

汽车行业引入的智能硬件技术已经越来越多,早先设计者更多考虑到的是硬件成本和软件用户体验等因素,但随着国外两位技术人员成功实现远程控制汽车的视频曝出后,智能汽车安全便成为了一个热议话题。 汽车总线架构及原理比较复杂,日…...

数据库视图

数据库视图(Database View)是数据库中的虚拟表,其内容由查询定义,通常用来简化复杂的查询或提供安全访问数据。视图并不存储实际数据,而是将查询的结果集作为一个“虚拟表”呈现。用户通过查询视图,就可以看…...

从传统分析到智能问数,打造零门槛数据分析方案

众所周知,传统报表和自助分析工具存在使用门槛,且早期智能分析不够智能。随着AI技术发展,现有数据应用模式难以满足多样化、快速变化的需求,数据驱动、敏捷决策、精细运营成为了各大企业的新课题。 01企业数据应用挑战 业务人员的…...

java 设计模式 模板方法模式

模板方法模式(Template Method Pattern)是一种行为型设计模式,它在父类中定义一个算法的框架,允许子类在不改变算法结构的情况下重写算法的某些特定步骤。这种模式非常适合于那些有一定公共流程,但某些步骤需要子类定制…...

基于UDP和TCP实现回显服务器

目录 一. UDP 回显服务器 1. UDP Echo Server 2. UDP Echo Client 二. TCP 回显服务器 1. TCP Echo Server 2. TCP Echo Client 回显服务器 (Echo Server) 就是客户端发送什么样的请求, 服务器就返回什么样的响应, 没有任何的计算和处理逻辑. 一. UDP 回显服务器 1. UD…...

在 CentOS 系统上直接安装 MongoDB 4.0.25

文章目录 步骤 1:配置 MongoDB 官方源步骤 2:安装 MongoDB步骤 3:启动 MongoDB 服务步骤 4:验证安装步骤 5:可选配置注意事项 以下是在 CentOS 系统上直接安装 MongoDB 4.0.25 的详细步骤: 步骤 1&#x…...

Android和IOS的区别

一、系统区别 1、系统和框架的区别 (1)Android系统的底层建立在Linux系统之上;而ios基于UNIX系统 Android完全开放,iOS完全封源开发 (2)编程语言:Android的编程语言是Java和KotLin;而ios的则为O…...

数据库基础(MySQL)

1. 数据库基础 1.1 什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质: 磁盘内存 为…...

Vue前端开发子组件向父组件传参

在父组件中,如果需要获取子组件中的数据,有两种方式,一种是在子组件中自定义事件,父组件绑定该事件,当触发自定义事件时,向父组件传入参数;另一种是先通过ref属性给子组件命名,然后在父组件中就…...

javaScript语法基础(函数,对象,常用类Array,String,Math和Date)

# 本文详细结束了JavaScript中函数、对象、常用类Array,String,Math和Date的用法。 一、函数 1、概述 将程序中多次要用到的代码块封装起来,就是函数。函数使代码块的重复使用更方便,且功能独立,便于维护。 2、函数的…...

WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理

WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理 1. 标题识别elementUI组件爆红 这个原因是: 在官网说明里,才版本2024.1开始,默认启用的 Vue Language Server,但是在 Vue 2 项…...

k8s-NetworkPolicy

NetworkPolicy 是k8s中的网络策略可以限制pod以及namespace之间的访问流量 演示一下名称空间之间基于端口的访问限制 官方对networkpolicy的介绍 官方网址: 网络策略 |Kubernetes (简体中文) 一:创建NetworkPolicy vim…...

【C++】踏上C++学习之旅(九):深入“类和对象“世界,掌握编程的黄金法则(四)(包含四大默认成员函数的练习以及const对象)

文章目录 前言1. 实现Date类的构造函数2. 实现Date类的拷贝构造函数3. 实现Date类的赋值运算符重载4. 实现各Date对象之间的比较接口5. 实现Date对象的加减接口6. const成员7. 取地址及const取地址操作符重载 前言 在我们前面学习到了"类和对象"的四大默认成员函数(…...

C++——智能指针剖析

参考: 恋恋风辰官方博客 动态内存管理 - cppreference.com SRombauts/shared_ptr: 一个最小的 shared/unique_ptr 实现,用于处理 boost/std::shared/unique_ptr 不可用的情况。 C智能指针_c 智能指针-CSDN博客 当…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

12.找到字符串中所有字母异位词

🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...