Python----计算机视觉处理(Opencv:形态学变换)

一、形态学变化

        形态学变换(Morphological Transformations)是一种基于形状的图像处理技术,主要处理的对象为二值化图像。

        形态学变换有两个输入和一个输出:输入为原始图像和核(即结构化元素),输出为经过形态学变换后的图像。

        其基本操作包括腐蚀(Erosion)和膨胀(Dilation),这两种操作互为反向过程,分别对图像中的亮度值产生不同的影响。

二、核

        核,或称结构化元素,是用于形态学变换的一个小的二值图像,通常呈现为简单的几何形状,例如矩形、椭圆形或十字形等。结构化元素的大小和形状直接影响腐蚀和膨胀操作的效果。

2.1、矩形

2.2、椭圆形

2.3、十字形

三、腐蚀

        腐蚀操作就是使用核在原图(二值化图)上进行从左到右、从上到下的滑动(也就是从图像的左上角开 始,滑动到图像的右下角)。在滑动过程中,令核值为1的区域与被核覆盖的对应区域进行相乘,得到其 最小值,该最小值就是卷积核覆盖区域的中心像素点的新像素值,接着继续滑动。由于操作图像为二值 图,所以不是黑就是白,这就意味着,在被核值为1覆盖的区域内,只要有黑色(像素值为0),那么该 区域的中心像素点必定为黑色(0)。这样做的结果就是会将二值化图像中的白色部分尽可能的压缩,如 下图所示,该图经过腐蚀之后,“变瘦”了。

 导入模块

import cv2

 读取图片

img=cv2.imread('img.png')

 灰度化

img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

 二值化

ret,img_threshold=cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)

 创建核

kernel=cv2.getStructuringElement(cv2.MORPH_CROSS,(15,15))

 腐蚀

img_erode=cv2.erode(img_threshold,kernel)

 显示图片

cv2.imshow('img_gray',img_gray)
cv2.imshow('img_erode',img_erode)
cv2.waitKey(0)

 完整代码

import cv2  # 导入OpenCV库  # 读取图像  
img = cv2.imread('img.png')  # 将图像转换为灰度图  
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 对灰度图像应用阈值处理,以获得二值图像  
# ret: 用于输出阈值值,img_threshold: 阈值处理后的图像  
ret, img_threshold = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)  # 创建一个15x15的十字形结构元素(腐蚀操作所用的卷积核)  
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (15, 15))  # 对阈值处理后的图像进行腐蚀操作  
img_erode = cv2.erode(img_threshold, kernel)  # 显示腐蚀处理后的图像  
cv2.imshow('img_erode', img_erode)  # 等待用户按键后关闭窗口  
cv2.waitKey(0)  

四、膨胀

        膨胀与腐蚀刚好相反,膨胀操作就是使用核在原图(二值化图)上进行从左到右、从上到下的滑动(也 就是从图像的左上角开始,滑动到图像的右下角),在滑动过程中,令核值为1的区域与被核覆盖的对应 区域进行相乘,得到其最大值,该最大值就是核覆盖区域的中心像素点的新像素值,接着继续滑动。由 于操作图像为二值图,所以不是黑就是白,这就意味着,在卷积核覆盖的区域内,只要有白色(像素值 为255),那么该区域的中心像素点必定为白色(255)。这样做的结果就是会将二值化图像中的白色部 分尽可能的扩张,如下图所示,该图经过腐蚀之后,“变胖”了。

导入模块

import cv2

 读取图片

img=cv2.imread('img.png')

 灰度化

img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

 二值化

ret,img_threshold=cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)

 创建核

kernel=cv2.getStructuringElement(cv2.MORPH_CROSS,(15,15))

 膨胀

img_dilate=cv2.dilate(img_threshold,kernel)

 显示图片

cv2.imshow('img_dilate',img_dilate)
cv2.waitKey(0)

完整代码 

import cv2  # 导入OpenCV库  # 读取图像  
img = cv2.imread('img.png')  # 将图像转换为灰度图  
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 对灰度图像应用阈值处理,以获得二值图像  
# ret: 用于输出阈值值,img_threshold: 阈值处理后的图像  
ret, img_threshold = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)  # 创建一个15x15的十字形结构元素(膨胀操作所用的卷积核)  
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (15, 15))  # 对阈值处理后的图像进行膨胀操作  
# 膨胀会增强图像中亮区域的大小  
img_dilate = cv2.dilate(img_threshold, kernel)  # 显示膨胀处理后的图像  
cv2.imshow('img_dilate', img_dilate)  # 等待用户按键后关闭窗口  
cv2.waitKey(0)  

五、库函数

5.1、getStructuringElement()

cv.getStructuringElement(	shape, ksize[, anchor]	) ->	retval
方法描述
shape可以是 MorphShapes 之一
ksize结构元素的大小。
anchor元素内的锚点位置。默认值(−1,−1)表示锚点位于中心。请注意,只有十字形元素的形状取决于锚点位置。在其他情况下,锚点只是调节形态作的结果偏移了多少
MorphShapes
MORPH_RECT
Python:cv.MORPH_RECT

矩形结构元素:

MORPH_CROSS
Python:cv.MORPH_CROSS

十字形结构元件:

MORPH_ELLIPSE
Python:cv.MORPH_ELLIPSE

椭圆结构元素,即内接到矩形 Rect(0, 0, esize.width, esize.height) 中的填充椭圆

5.2、erode()

cv.erode(	src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]	) ->	dst
方法描述
src输入图像;通道数可以是任意的,但深度应该是 CV_8U、 CV_16U、 CV_16S、 CV_32F 或 CV_64F 之一。
dst输出图像的大小和类型与 src 相同。
kernel用于侵蚀的结构元件;如果 ,则使用矩形结构元素。可以使用 getStructuringElement 创建 Kernel。element=Mat()3 x 3
anchor锚点在元素中的位置;默认值 (-1, -1) 表示锚点位于元素中心。
iterations应用 腐蚀的次数。
borderType像素外插方法,请参阅 BorderTypes。不支持BORDER_WRAP。
borderValueborder 值(如果边界为常量)
BorderTypes
BORDER_CONSTANT
Python:cv.BORDER_CONSTANT

iiiiii|abcdefgh|iiiiiii并指定一些i

BORDER_REPLICATE
Python:cv.BORDER_REPLICATE

aaaaaa|abcdefgh|hhhhhhh

BORDER_REFLECT
Python:cv.BORDER_REFLECT

fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101
Python:cv.BORDER_REFLECT_101

gfedcb|abcdefgh|gfedcba

BORDER_TRANSPARENT
Python:cv.BORDER_TRANSPARENT

uvwxyz|abcdefgh|ijklmno- 将离群值视为透明值。

BORDER_REFLECT101
Python:cv.BORDER_REFLECT101

与 BORDER_REFLECT_101 相同

BORDER_DEFAULT
Python:cv.BORDER_DEFAULT

与 BORDER_REFLECT_101 相同

BORDER_ISOLATED
Python:cv.BORDER_ISOLATED

插值限制在 ROI 边界内。

5.3、 dilate()

cv.dilate(	src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]	) ->	dst
方法描述
src输入图像;通道数可以是任意的,但深度应该是 CV_8U、 CV_16U、 CV_16S、 CV_32F 或 CV_64F 之一。
dst输出图像的大小和类型与 src 相同。
kernel用于扩张的结构元件;如果 element=Mat(),则使用 3 x 3 矩形结构元素。可以使用 getStructuringElement 创建 Kernel
anchor锚点在元素中的位置;默认值 (-1, -1) 表示锚点位于元素中心。
iterations应用扩张的次数。
borderType像素外插方法,请参阅 BorderTypes。不支持BORDER_WRAP。
borderValueborder 值(如果边界为常量)
BorderTypes
BORDER_CONSTANT
Python:cv.BORDER_CONSTANT

iiiiii|abcdefgh|iiiiiii并指定一些i

BORDER_REPLICATE
Python:cv.BORDER_REPLICATE

aaaaaa|abcdefgh|hhhhhhh

BORDER_REFLECT
Python:cv.BORDER_REFLECT

fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101
Python:cv.BORDER_REFLECT_101

gfedcb|abcdefgh|gfedcba

BORDER_TRANSPARENT
Python:cv.BORDER_TRANSPARENT

uvwxyz|abcdefgh|ijklmno- 将离群值视为透明值。

BORDER_REFLECT101
Python:cv.BORDER_REFLECT101

与 BORDER_REFLECT_101 相同

BORDER_DEFAULT
Python:cv.BORDER_DEFAULT

与 BORDER_REFLECT_101 相同

BORDER_ISOLATED
Python:cv.BORDER_ISOLATED

插值限制在 ROI 边界内。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【新能源汽车“心脏”赋能:三电系统研发、测试与应用匹配的恒压恒流源技术秘籍】

新能源汽车“心脏”赋能:三电系统研发、测试与应用匹配的恒压恒流源技术秘籍 在新能源汽车蓬勃发展的浪潮中,三电系统(电池、电机、电控)无疑是其核心驱动力。而恒压源与恒流源,作为电源管理的关键要素,在…

Android的消息机制

Android的消息机制-从入门到精通 前言Android消息机制概述Android 的消息机制分析ThreadLocal 的工作原理消息队列的工作原理Looper的工作原理Handler的工作原理 主线程的消息循环 前言 作为开发者,提及Android的消息机制,必然绕不开Handler,…

es-将知识库中的数据转换为向量存储到es并进行相似性检索

目录 为什么要将数据转为向量存入es? 数据准备 创建索引库 向量存储 验证 为什么要将数据转为向量存入es? 我之前把数据作为文档存入 ES,主要用于全文检索(BM25 算法),但是它不适合语义匹配,比如如果用户输入的…

【资料分享】全志科技T113-i全国产(1.2GHz双核A7 RISC-V)工业核心板规格书

核心板简介 创龙科技SOM-TLT113 是一款基于全志科技T113-i 双核ARM Cortex-A7 玄铁C906 RISC-V HiFi4 DSP 异构多核处理器设计的全国产工业核心板,ARM Cortex-A7 处理单元主频高达1.2GHz。核心板 CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案&…

wepy微信小程序自定义底部弹出框功能,显示与隐藏效果(淡入淡出,滑入滑出)

视图html部分 <view class"salePz"><view class"btnSelPz" tap"pzModelClick">去选择</view><!-- modal --><view class"modal modal-bottom-dialog" hidden"{{hideFlag}}"><view class&q…

基于Springboot+Typst的PDF生成方案,适用于报告打印/标签打印/二维码打印等

基于SpringbootTypst的PDF生成方案&#xff0c;适用于报告打印/标签打印/二维码打印等。 仅提供后端实现 Typst2pdf-for-report/label/QR code github 环境 JDK11linux/windows/mac 应用场景 适用于定制化的报告模板/标签/条码/二维码等信息的pdf生成方案。通过浏览器的p…

leetcode每日一题:使字符串平衡的最小交换次数

引言 今天开始&#xff0c;打算做一个新的系列&#xff1a;leetcode每日一题的题解。预期每天用90分钟的时间&#xff0c;去写一篇当天的每日一题的题解&#xff0c;这个目标跟早起结合在一起&#xff0c;才有足够的时间完成。其实早在前几年&#xff0c;就开始断断续续做leetc…

Learn Redis 5 (Java)

分布式锁 在面对高并发业务时&#xff0c;单个项目解决不过来&#xff0c;此时一个项目部署到多个机器&#xff0c;这就是集群模式&#xff0c;不同的项目实例就会对应不同的端口和JVM。 1.模拟集群模式 Nginx实现负载均衡&#xff08;轮询&#xff09; 2.使用集群模…

lua学习(三)

错误处理 assert断言 作用&#xff1a;确保某些数据是符合预期的&#xff0c;避免影响最终结果。 格式&#xff1a;assert(条件语句&#xff0c;报错信息) 当条件语句为true时&#xff0c;assert语句不会有任何行为&#xff0c;但是当为false时&#xff0c;assert会将报错信息…

基于eNSP的IPV4和IPV6企业网络规划

基于eNSP的IPV4和IPV6企业网络规划 前言网络拓扑设计功能设计技术详解一、网络设备基础配置二、虚拟局域网&#xff08;VLAN&#xff09;与广播域划分三、冗余协议与链路故障检测四、IP地址自动分配与DHCP相关配置五、动态路由与安全认证六、广域网互联及VPN实现七、网络地址转…

优选算法合集————双指针(专题四)

1&#xff0c;一维前缀和模版 题目描述&#xff1a; 描述 给定一个长度为n的数组a1,a2,....ana1​,a2​,....an​. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出alal1....aral​al1​....ar​ 输入描述&#xff1a; 第一行包含两个整数n和q. 第二行…

Web3游戏行业报告

一&#xff0c;gamefi经济 什么是gamefi GameFi是一个缩写&#xff0c;它结合了游戏和去中心化金融(“DeFi”)这两个术语&#xff0c;关注的是游戏玩法如何在去中心化系统中实现货币化。对于游戏而言&#xff0c;只要开放了交易市场&#xff0c;允许玩家自由买卖&#xff0c;…

【程序人生】成功人生架构图(分层模型)

文章目录 ⭐前言⭐一、根基层——价值观与使命⭐二、支柱层——健康与能量⭐三、驱动层——学习与进化⭐四、网络层——关系系统⭐五、目标层——成就与财富⭐六、顶层——意义与传承⭐外层&#xff1a;调节环——平衡与抗风险⭐思维导图 标题详情作者JosieBook头衔CSDN博客专家…

拖拽实现+摇杆实现

拖拽实现 拖拽事件实现: 半透明渐变贴图在ios设备下&#xff0c;使用压缩会造成图片质量损失&#xff0c;所以可以将半透明渐变UI切片单独制作真彩色图集 拖拽事件组 IBeginDragHandler:检测到射线后&#xff0c;当拖拽动作开始时执行一次回调函数 IDragHandler:拖拽开始后&a…

vs2017版本与arcgis10.1的ArcObject SDK for .NET兼容配置终结解决方案

因电脑用的arcgis10.1,之前安装的vs2010正常能使用AO和AE&#xff0c;安装vs2017后无法使用了&#xff0c;在重新按照新版本arcgis engine或者arcObject费时费力&#xff0c;还需要重新查找资源。 用vs2017与arc10.1的集成主要两个问题&#xff0c;1&#xff1a;安装后vs中没有…

C语言和C++到底有什么关系?

C 读作“C 加加”&#xff0c;是“C Plus Plus”的简称。 顾名思义&#xff0c;C 就是在 C 语言的基础上增加了新特性&#xff0c;玩出了新花样&#xff0c;所以才说“Plus”&#xff0c;就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。 C 语言是 1972 年由美国贝…

企业微信群聊机器人开发

拿到机器人hook 机器人开发文档 https://developer.work.weixin.qq.com/document/path/91770

AT指令集-NBIOT

是什么&#xff1f; 窄带物联网&#xff08;Narrow Band Internet of Things, NB-IoT&#xff09;成为万物互联网络的一个重要分支支持低功耗设备在广域网的蜂窝数据连接&#xff0c;也被叫作低功耗广域网(LPWAN)NB-IoT支持待机时间长、对网络连接要求较高设备的高效连接NB-Io…

网络爬虫【爬虫库urllib】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 urllib介绍 Urllib是Python自带的标准库&#xff0c;无须安装&#xff0c;直接引用即可。 Urllib是一个收集几个模块来使用URL的软件包&#xff0c;大致具备以下功能。 ● urlli…

vue中js简单创建一个事件中心/中间件/eventBus

vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下&#xff1a; eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…