OpenCV(三十一):形态学操作

​​​​​​1.形态学操作

OpenCV 提供了丰富的函数来进行形态学操作,包括腐蚀、膨胀、开运算、闭运算等。下面介绍一些常用的 OpenCV 形态学操作函数:

  1. 腐蚀操作(Erosion): erode(src, dst, kernel, anchor, iterations, borderType, borderValue) 该函数对输入图像中的前景区域进行腐蚀操作,通过用结构元素中的最小值替换区域中的像素值来收缩前景区域。

  2. 膨胀操作(Dilation): dilate(src, dst, kernel, anchor, iterations, borderType, borderValue) 该函数对输入图像中的前景区域进行膨胀操作,通过用结构元素中的最大值替换区域中的像素值来扩展前景区域。

  3. 开运算(Opening): morphologyEx(src, dst, MORPH_OPEN, kernel, anchor, iterations, borderType, borderValue) 开运算是先对图像进行腐蚀操作,然后再进行膨胀操作。这个操作可以去除小的噪声,并平滑图像的边界。

  4. 闭运算(Closing): morphologyEx(src, dst, MORPH_CLOSE, kernel, anchor, iterations, borderType, borderValue) 闭运算是先对图像进行膨胀操作,然后再进行腐蚀操作。这个操作可以填充小的空洞,并平滑图像的边界。

  5. 梯度运算(Gradient): morphologyEx(src, dst, MORPH_GRADIENT, kernel, anchor, iterations, borderType, borderValue) 梯度运算可以通过对输入图像的膨胀和腐蚀结果之差来突出显示边缘。

  6. 顶帽运算(Top Hat): morphologyEx(src, dst, MORPH_TOPHAT, kernel, anchor, iterations, borderType, borderValue) 顶帽运算可以通过对输入图像和开运算结果之差来突出显示边缘和细节。

  7. 黑帽运算(Black Hat): morphologyEx(src, dst, MORPH_BLACKHAT, kernel, anchor, iterations, borderType, borderValue) 黑帽运算可以通过对闭运算结果和输入图像之差来突出显示边缘和细节。

以上函数中,src 是输入图像,dst 是输出图像,kernel 是结构元素,anchor 是结构元素的锚点位置,iterations 是迭代次数,borderType 是边界像素处理方式,borderValue 是边界像素的值。

2.相关函数morphologyEx()

morphologyEx() 是 OpenCV 库中用于形态学操作的函数之一。它可以执行包括腐蚀、膨胀、开运算、闭运算等一系列形态学操作。该函数的原型如下:

void morphologyEx(

InputArray src,

OutputArray dst,

int op,

InputArray kernel,

Point anchor = Point(-1,-1),

int iterations = 1,

int borderType = BORDER_CONSTANT,

const Scalar& borderValue = morphologyDefaultBorderValue()

);

该函数的参数包括:

  • src:输入图像或图像数组。

  • dst:输出图像或图像数组。

  • op:指定形态学操作的类型。

  • kernel:结构元素(核)用于形态学操作。

  • anchor:结构元素中心的位置,默认为(-1, -1)表示结构元素的中心位置为核的中心。

  • iterations:执行形态学操作的迭代次数,默认为1。

  • borderType:边界像素处理方式,默认为BORDER_CONSTANT。

  • borderValue:当borderType为BORDER_CONSTANT时指定边界像素的值,默认为morphologyDefaultBorderValue()。

其中形态学操作的类型:

3.示例代码:

void image_morphologyEx(Mat image){
    Mat gray;
    cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化
    threshold(gray,gray,80,255,THRESH_BINARY);
    //5×5矩阵结构元素
    Mat kernel= getStructuringElement(0,Size(5,5));
    Mat open,close,gradient,tophat,blackhat;
    //对图像进行开运算
    morphologyEx(gray,open,MORPH_OPEN,kernel);
    //对图像进行闭运算
    morphologyEx(gray,close,MORPH_CLOSE,kernel);
    //对图像进行梯度运算
    morphologyEx(gray,gradient,MORPH_GRADIENT,kernel);
    //对图像进行顶帽运算
    morphologyEx(gray,tophat,MORPH_TOPHAT,kernel);
    //对图像进行黑帽运算
    morphologyEx(gray,blackhat,MORPH_BLACKHAT,kernel);
  
}
相关推荐
萝卜兽编程5 分钟前
优先级队列
c++·算法
LZXCyrus20 分钟前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
我感觉。37 分钟前
【机器学习chp4】特征工程
人工智能·机器学习·主成分分析·特征工程
YRr YRr1 小时前
深度学习神经网络中的优化器的使用
人工智能·深度学习·神经网络
DieYoung_Alive1 小时前
一篇文章了解机器学习(下)
人工智能·机器学习
夏沫的梦1 小时前
生成式AI对产业的影响与冲击
人工智能·aigc
goomind1 小时前
YOLOv8实战木材缺陷识别
人工智能·yolo·目标检测·缺陷检测·pyqt5·木材缺陷识别
只怕自己不够好1 小时前
《OpenCV 图像基础操作全解析:从读取到像素处理与 ROI 应用》
人工智能·opencv·计算机视觉
幻风_huanfeng1 小时前
人工智能之数学基础:线性代数在人工智能中的地位
人工智能·深度学习·神经网络·线性代数·机器学习·自然语言处理
嵌入式大圣1 小时前
嵌入式系统与OpenCV
人工智能·opencv·计算机视觉