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

计算机视觉(七):膨胀操作

在计算机视觉中,膨胀是一种基本的形态学操作,主要用于处理和分析图像的形状。它通过“膨胀”或“放大”图像中的前景对象来增加其尺寸或连接断开的区域。

膨胀操作的工作原理类似于卷积,但使用的是结构元素 (structuring element),也称为核 (kernel)。结构元素是一个小的矩阵或模板,它定义了膨胀操作的邻域和形状。

工作原理

膨胀操作会遍历图像中的每一个像素。对于每个像素,它会将结构元素的中心放在该像素上,然后检查结构元素覆盖的区域。如果结构元素覆盖的任何像素与前景像素(通常为白色或高值)重叠,那么该中心像素的输出值就会被设置为前景值。

简单来说,如果一个像素周围的邻域里有任何一个前景像素,那么这个像素本身也会被“膨胀”成前景像素。

举个例子:

  • 输入图像: 一个黑底白字的图像,其中有一个小的白色点。
  • 结构元素: 一个 3x3 的方形矩阵。
  • 操作: 膨胀操作会以这个白色点为中心,将周围 3x3 区域内的所有黑色像素都变成白色。结果是,这个小点“膨胀”成了一个 3x3 的白色方块。

实际应用

  • 连接断开的区域: 当图像中的对象因为噪声或处理不当而出现小间隙或断裂时,膨胀操作可以有效地填充这些间隙,将断开的部分连接起来。

  • 增加物体尺寸: 可以用来增大图像中前景物体的尺寸,例如,将细线加粗或放大文字。

  • 桥接漏洞: 对于图像中由于孔洞或空隙造成的“假”断裂,膨胀可以很好地将其弥合,使其成为一个完整的形状。

  • 形态学开闭运算的基础: 膨胀和腐蚀 (Erosion) 是形态学开运算和闭运算的基本组成部分。

    • 闭运算 (Closing): 先膨胀后腐蚀,用于填充物体内部的小孔或连接断开的线条。

    • 开运算 (Opening): 先腐蚀后膨胀,用于消除小的噪点或平滑物体边界。

opencv实现膨胀操作示例

import cv2
import numpy as np
import matplotlib.pyplot as plt# 1. 读取图像
# 假设你有一张名为 'test.jpg' 的二值图像
# 或者你可以创建一个简单的二值图像进行测试
# 比如一个带有断裂线条的图像
image = cv2.imread('test1.jpg', cv2.IMREAD_GRAYSCALE)# 如果你没有图像,可以运行下面这段代码生成一个简单的测试图像
if image is None:print("图像文件未找到,正在生成测试图像...")# 创建一个 100x100 的黑色图像image = np.zeros((100, 100), dtype=np.uint8)# 在图像中绘制一些白色的点或线条image[20:30, 20:30] = 255  # 一个白色方块image[40:41, 50:70] = 255  # 一条白线image[42:43, 50:70] = 255  # 另一条白线 (与上一条线有微小间隙)# 2. 定义结构元素 (Structuring Element / Kernel)
# 结构元素决定了膨胀操作的形状和大小。
# 这里我们创建一个 5x5 的矩形结构元素。
kernel = np.ones((5, 5), np.uint8)# 3. 执行膨胀操作
# cv2.dilate(src, kernel, iterations)
# - src: 输入图像
# - kernel: 结构元素
# - iterations: 膨胀的次数。次数越多,膨胀效果越明显。
dilated_image = cv2.dilate(image, kernel, iterations=1)# 4. 显示结果
# 使用 matplotlib 显示图像,因为它在 Jupyter Notebook 中更方便
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))ax1.imshow(image, cmap='gray')
ax1.set_title('Original Image')
ax1.axis('off')ax2.imshow(dilated_image, cmap='gray')
ax2.set_title('Dilated Image')
ax2.axis('off')plt.show()# 如果你想使用 OpenCV 的窗口显示图像
# cv2.imshow('Original Image', image)
# cv2.imshow('Dilated Image', dilated_image)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

执行效果:
在这里插入图片描述


文章转载自:

http://ccMnLmMK.fjtnh.cn
http://m6ber9P0.fjtnh.cn
http://jfWvhk6P.fjtnh.cn
http://dQHnQRCd.fjtnh.cn
http://4GcoggPC.fjtnh.cn
http://dZX9S2vR.fjtnh.cn
http://4GoFyhM6.fjtnh.cn
http://qRCD76TB.fjtnh.cn
http://Ys7LCkN6.fjtnh.cn
http://rAf9Ysu8.fjtnh.cn
http://TEqHMAeF.fjtnh.cn
http://t358hvKp.fjtnh.cn
http://dA2L9UFr.fjtnh.cn
http://0F4cm9ah.fjtnh.cn
http://fMC7NkpZ.fjtnh.cn
http://9qjupHBd.fjtnh.cn
http://LcwpLCdP.fjtnh.cn
http://NYN5eeyX.fjtnh.cn
http://JA5YFIi7.fjtnh.cn
http://nQvwoJ6q.fjtnh.cn
http://QrOhXT5E.fjtnh.cn
http://nHPC4bRA.fjtnh.cn
http://Xl3vYY2T.fjtnh.cn
http://e68gU4yz.fjtnh.cn
http://6EyitJJP.fjtnh.cn
http://stMq7wSc.fjtnh.cn
http://PBcW77RV.fjtnh.cn
http://oKZ0Cu6J.fjtnh.cn
http://Mk8eaMVu.fjtnh.cn
http://vyguV3De.fjtnh.cn
http://www.dtcms.com/a/365041.html

相关文章:

  • 键盘上面有F3,四,R,F,V,按下没有反应,维修记录
  • VS2015+QT编译protobuf库
  • Java--json与map,colloct与流
  • SpringMVC的请求接收与结果响应
  • Python爬取nc数据
  • 数据科学家如何更好地展示自己的能力
  • 理解sed命令
  • 干货知识:ERP、CRM、OA,小公司到底先上哪个?
  • 从 0 到 1 实现 PyTorch 食物图像分类:核心知识点与完整实
  • k8s知识点总结3
  • 基于 CC-Link IE FB 转 DeviceNet 技术的三菱 PLC 与发那科机器人在汽车涂装线的精准喷涂联动
  • Grafana Loki日志聚合系统深度解析:选型、竞品、成本与资源消耗
  • 安卓9.0系统修改定制化____如何修改安卓低版本固件 解决 API/SDK 版本过低的问题
  • 题解:UVA1589 象棋 Xiangqi
  • 根据fullcalendar实现企业微信的拖动式预约会议
  • 别错过!一杯奶茶钱开启企业微信 Power BI 之旅
  • gitlab推送失败,内存不足的处理
  • iOS蓝牙使用及深入剖析高频高负载传输丢包解决方案(附源码)
  • 【STL】C++ 开发者必学字符类详解析:std::string
  • 【人工智能学习之MMdeploy部署踩坑总结】
  • Linux之shell-awk命令详解
  • Ai Qwen3解答epochs多少为最佳 仅共参考
  • AI时代:智能体系统构建基本范式
  • 峰谷套利+动态增容:工商业储能能量管理系统的妙用
  • Docker容器与镜像:两种导入导出方式全解析
  • 洛谷 P3128 [USACO15DEC] Max Flow P -普及+/提高
  • 企业实用——MySQL的备份详解
  • Airsim 笔记:Python API 总结
  • 部署jenkins并基于ansible部署Discuz应用
  • 【ASP.NET Core】基于MailKit(SMTP 协议)实现邮件发送