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);
  
}
相关推荐
数智前线14 分钟前
AI Coding,正在把存储推向前台
人工智能
唠点键盘之外的5 小时前
15 微调 vs RAG:到底怎么选
人工智能·机器学习·面试·aigc
AC赳赳老秦6 小时前
采集行为合规自检:OpenClaw 自动校验 robots 协议与采集频率,规避违规采集风险
java·开发语言·c++·python·php·deepseek·openclaw
具身AGI6 小时前
人机协同预训练:三条路线,一条拉开差距
人工智能
东风破_6 小时前
LangSmith:从链路追踪到 RAG 自动化评估
人工智能
无名猿6 小时前
C++ 查找算法:std::find 与容器成员 find 的性能差距
c++·性能优化·stl·标准库
东方芷兰6 小时前
Agent 技术摘要 04 —— AI4S、VLM、VLA、VLN、WM、AI Infra
人工智能
catchadmin6 小时前
用 Jev 与 Laravel AI SDK 检测垃圾邮件和自动回复
数据库·人工智能·laravel
一 铭7 小时前
Pi实战 05:本地模型 · MCP · 安全沙箱篇
人工智能·ai·agent·harness
程序猿编码7 小时前
工业视觉多任务方案:可编程梯度信息视觉框架,训练评估 + C++ 部署完整实战
开发语言·c++·视觉·推理引擎