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

OpenCV入门7:图像形态学变换

 

形态学是一种针对图像形状和结构进行操作和分析的图像处理方法。在OpenCV中,提供了一些函数和方法用于执行形态学操作。下面将介绍一些常见的形态学操作及其在OpenCV中的实现方式。

  • 膨胀(Dilation):

膨胀操作可以扩展图像中的边缘和明显的亮区域。它通过在图像上滑动一个结构元素(通常是一个正方形或圆形的小区域),将与该结构元素有重叠的区域像素的最大值赋给输出图像中的对应像素。在OpenCV中,可以使用cv::dilate()函数进行膨胀操作。以下是一个示例:

cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE); // 读取灰度图像 cv::Mat dilatedImage; 
// 结构元素为3x3的矩形 
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3)); 
cv::dilate(image, dilatedImage, kernel); // 图像膨胀
  • 腐蚀(Erosion):

腐蚀操作与膨胀操作相反,可以消除图像中的边缘和明显的亮区域,使其变窄。它通过在图像上滑动一个结构元素,将与该结构元素完全重叠的区域像素的最小值赋给输出图像中的对应像素。在OpenCV中,可以使用cv::erode()函数进行腐蚀操作。以下是一个示例:

cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE); // 读取灰度图像 
cv::Mat erodedImage; 
// 结构元素为3x3的矩形 
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3)); 
cv::erode(image, erodedImage, kernel); // 图像腐蚀
  • 开运算(Opening)和闭运算(Closing):

开运算和闭运算是形态学操作中常用的组合操作,包括先腐蚀后膨胀(开运算)和先膨胀后腐蚀(闭运算)。开运算可以消除图像中的噪声和细小的斑点,而闭运算可以填充图像中的孔洞和连接断开的区域。在OpenCV中,可以使用cv::morphologyEx()函数进行开运算和闭运算操作。以下是一个示例:

cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE); // 读取灰度图像 cv::Mat openedImage, closedImage; 
// 结构元素为3x3的矩形 
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
cv::morphologyEx(image, openedImage, cv::MORPH_OPEN, kernel); // 开运算 
cv::morphologyEx(image, closedImage, cv::MORPH_CLOSE, kernel); // 闭运算

以上是OpenCV中常见的形态学操作的示例,包括膨胀、腐蚀、开运算和闭运算等。通过这些操作,可以对图像进行形状和结构上的改变和逐渐调整。

 

http://www.lryc.cn/news/223250.html

相关文章:

  • Apache Storm 2.5.0 集群安装与配置
  • Android-将编码的base64图像,添加水印,转换成File存储到手机
  • AI 绘画 | Stable Diffusion 图生图
  • Nat. Med. | 基于遗传学原发部位未知癌症的分类和治疗反应预测
  • RocketMQ如何安全的批量发送消息❓
  • 计算机视觉与深度学习 | 基于视觉惯性紧耦合的SLAM后端优化算法
  • GDI+ 绘制透明图
  • 【Java】IntelliJ IDEA使用JDBC连接MySQL数据库并写入数据
  • Linux Hadoop平台伪分布式安装
  • 【STM32-DSP库的使用】基于Keil5 + STM32CubeMX 手动添加、库添加方式
  • createElement的用法
  • Mabitys总结
  • JAVA安全之Log4j-Jndi注入原理以及利用方式
  • Spring源码系列-框架中的设计模式
  • 数据的读取和保存-MATLAB
  • C++ 输入、输出和整数运算
  • Element Plus 解决组件显示英文问题
  • sqlite3.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher
  • 单线程介绍、ECMAScript介绍、操作系统Windows、Linux 和 macOS
  • 【Docker】iptables基本原理
  • 微服务架构——笔记(3)Eureka
  • 网络编程套接字(2)——简单的TCP网络程序
  • MySQL数据库的简单的面试题
  • hbuilderx打包应用上传到app store构建版本的教程
  • 第五届泰迪杯数据分析技能赛B题源码图片分享
  • 【小白专用】VSCode下载和安装与配置PHP开发环境(详细版) 23.11.08
  • Qlik Sense : Fetching data with Qlik Web Connectors
  • 聊一聊 tcp/ip 在.NET故障分析的重要性
  • 利用梯度上升可视化卷积核:基于torch实现
  • python+playwright 学习-85 启动参数 proxy 设置代理几种方式