博客
关于我
OpenCV学习笔记之七——图像形态学处理(一)
阅读量:798 次
发布时间:2023-04-15

本文共 1872 字,大约阅读时间需要 6 分钟。

OpenCV形态学入门:膨胀与腐蚀操作详解

数学形态学是图像分析领域的重要工具之一,其核心操作包括膨胀和腐蚀。通过这些操作,我们可以对图像进行多种变换,从噪声消除到图像分割再到特征提取,这些操作都能显著提升图像处理效果。本文将详细介绍膨胀和腐蚀操作的实现方法及其应用。


1. 膨胀操作(Dilation)

膨胀操作是形态学中的基本操作之一,其主要作用是将图像中每个像素扩展为一个小方块,实现图像的“膨胀”。通过膨胀操作可以消除图像中的噪声,或者将小图像元素合并成一个较大的区域。

1.1 膨胀函数的实现

在OpenCV中,膨胀操作由dilate函数实现。函数的核心参数包括:

  • src:输入图像。
  • dst:输出图像。
  • kernel:膨胀核,默认使用3x3的正方形核。
  • anchor:锚点位置,默认为(-1, -1),表示核的中心。
  • iterations:迭代次数,默认为1。

通过getStructuringElement函数,我们可以创建不同形状的核。常用的核形状包括:

  • 矩形核(MORPH_RECT):用于普通膨胀。
  • 十字形核(MORPH_CROSS):用于边缘检测。
  • 椭圆形核(MORPH_ELLIPSE):用于圆形膨胀。

1.2 核的尺寸与锚点

核的尺寸通过Size结构体定义,锚点位置通过Point结构体定义,默认为中心位置。需要注意的是,锚点的位置会影响结果的偏移,尤其在非中心对称的核中。


2. 腐蚀操作(Erosion)

腐蚀操作是膨胀操作的逆操作,其主要作用是将图像中每个像素收缩为一个小方块,实现图像的“腐蚀”。腐蚀操作可以用来分割图像中的图像元素,或者提取图像中的极值区域。

2.1 腐蚀函数的实现

在OpenCV中,腐蚀操作由erode函数实现,其参数与膨胀函数类似。默认使用3x3的正方形核进行操作。


3. 代码实现示例

以下是一个实现膨胀和腐蚀操作的示例代码:

#include 
#include
#include
#include
using namespace std; using namespace cv;int Way_num = 0;int struct_size = 1;Mat Img_in, Img_out;void callback_Way_num(int, void*) { process(); }void callback_struct_size(int, void*) { process(); }int main() { Img_in = imread("lenna.jpg"); imshow("【原图】", Img_in); namedWindow("【效果图】"); createTrackbar("腐蚀/膨胀", "【效果图】", &Way_num, 1, callback_Way_num); callback_Way_num(Way_num, 0); createTrackbar("内核尺寸", "【效果图】", &struct_size, 37, callback_struct_size); callback_struct_size(struct_size, 0); waitKey(0); return 0;}void process() { Mat element = getStructuringElement(MORPH_RECT, Size(struct_size * 2 + 1, struct_size * 2 + 1), Point(struct_size, struct_size)); if (Way_num == 0) { erode(Img_in, Img_out, element); } else { dilate(Img_in, Img_out, element); } imshow("【效果图】", Img_out);}

4. 效果展示

通过上述代码,我们可以实时查看膨胀和腐蚀操作的效果。通过调整Way_numstruct_size参数,我们可以选择不同的核形状和大小,观察图像的变化。


这篇文章详细介绍了OpenCV中膨胀和腐蚀操作的实现方法,并通过代码示例展示了实际应用。希望对您对图像处理有所帮助!

转载地址:http://lwgfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现字符串autocomplete using trie(使用 trie 自动完成)算法(附完整源码)
查看>>
Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
查看>>
Objective-C实现字符串IP地址转DWORD地址(附完整源码)
查看>>
Objective-C实现字符串jaro winkler算法(附完整源码)
查看>>
Objective-C实现字符串manacher马拉车算法(附完整源码)
查看>>
Objective-C实现字符串wildcard pattern matching通配符模式匹配算法(附完整源码)
查看>>
Objective-C实现字符串word patterns单词模式算法(附完整源码)
查看>>
Objective-C实现字符串Z 函数或 Z 算法(附完整源码)
查看>>
Objective-C实现字符串加解密(附完整源码)
查看>>
Objective-C实现字符串反转(附完整源码)
查看>>
Objective-C实现字符串复制功能(附完整源码)
查看>>
Objective-C实现字符串是否回文Palindrome算法 (附完整源码)
查看>>
Objective-C实现字符串查找子串(附完整源码)
查看>>
Objective-C实现完整的ComplexNumber复数类(附完整源码)
查看>>
Objective-C实现实现rabin karp算法(附完整源码)
查看>>
Objective-C实现对图像进行色调处理算法(附完整源码)
查看>>
Objective-C实现对称矩阵压缩存储(附完整源码)
查看>>
Objective-C实现寻找欧拉路径/回路(附完整源码)
查看>>
Objective-C实现导弹跟踪算法(附完整源码)
查看>>
Objective-C实现将 base64 字符串转换为字节数组算法(附完整源码)
查看>>