OpenCV9---膨胀与腐蚀操作

九、膨胀与腐蚀
1、形态学操作

  • 图像形态学操作—基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学
  • 形态学有四个基本操作:腐蚀、膨胀、开、闭
  • 膨胀与腐蚀是图像处理中最常用的形态学操作手段

2、形态学操作—膨胀(空白区域变大了,暗色部分变小了)

  • 跟卷积操作类似,假设图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。(和前面提到的最大值滤波类似,不同的是这里的B可以为任意形状)
  • 可以运用膨胀消除背景中的小的黑点
dilate(src, dst, kernel);//src为待处理图像,dst为处理后图像,kernel为获得的结构元素(后面会说到)将结构元素kernel覆盖下的所有像素的最大值赋给锚点

3、形态学操作—腐蚀(黑色区域变大了,空白区域变小了)

  • 腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值
  • 可以运用腐蚀消除背景中小的白点
erode(src, dst, kernel);//将结构元素kernel覆盖下的所有像素的最小值赋给锚点

4、相关的API

  • 获取结构元素
getStructuringElement(int shape, Size ksize, Point anchor);

第一个参数:形状MORPH_RECT\ MORPH_CROSS\ MORPH_ELLIPSE
第二个参数:大小,只能为正的奇数
第三个参数:锚点默认是Point(-1,-1),意思是中心像素点

  • 动态调整结构元素大小(界面操作:创造一个界面拖动条)
createTrackbar("Element Size :", OUTPUT_WIN, &element_size, max_size, CallBack_Demo);

第一个参数:拖动条名称
第二个参数:窗口名称
第三个参数:元素开始的值
第四个参数:元素的最大值
第五个参数:一个callback功能函数

示例代码(膨胀腐蚀操作):

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

Mat src, dst;
int element_size = 3;
int max_size = 21;
void CallBack_Demo(int, void*);

int main(int argc, char** argv) {
    src = ("添加图片路径");
    if (!src.data) {
        cout << "could not load image..." << endl;
        return -1;
    }
    imshow("input", src);

    namedWindow("output", WINDOW_AUTOSIZE);
    createTrackbar("Element Size :", "output", &element_size, max_size, CallBack_Demo);//在output窗口生成一个拖动条
    CallBack_Demo(0, 0);

    waitKey(0);
    destroyAllWindows();
    return 0;
} 

void CallBack_Demo(int, void*) {
    int s = 2 * element_size + 1; //只能为奇数
    Mat structureElement = getStructuringElement(MORPH_RECT, Size(s,s), Point(-1, -1));
    dilate(src, dst, structureElement);//膨胀
    erode(src, dst, structureElement);//腐蚀
    return ;
}

最终输出结果如下:

膨胀:(左为原图;右为膨胀图,其上方带有拖动条)
在这里插入图片描述
腐蚀:(左为原图;右为腐蚀图,其上方带有拖动条)
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值