美文网首页
OpenCV图像处理(七)图像滤波(2)

OpenCV图像处理(七)图像滤波(2)

作者: 行走行囊 | 来源:发表于2018-04-07 21:03 被阅读0次

1、形态学滤波

简单来说,形态学操作就是基于形状的一系列图像处理操作,最基本的形态学操作:膨胀、腐蚀。在图像处理中,两种操作都是针对白色部分(高亮部分)而言的,膨胀就是对白色部分的扩张,相反,腐蚀是白色部分被腐蚀。
膨胀,就是求局部最大值的操作,所谓的局部是指一个任意大小和形状的卷积核(或称模板,掩码),该核覆盖的像素值中取最大值,赋值给核锚点(通常是中间点)所对应的像素点,这样就会使图像中高亮部分逐渐扩张。
腐蚀,就是膨胀的反操作,核覆盖的像素值中取最小值,效果也是相反的。
开操作,先腐蚀后膨胀,其效果就是去除图像中的一些白色点(高亮点)。
闭操作,先膨胀后腐蚀,其效果就是填补图像中的黑色空洞。
顶帽,原图与开运算之差。
黑帽,原图与比运算之差。

2、函数原型

// 膨胀
void dilate( InputArray src, OutputArray dst, InputArray kernel,
                          Point anchor = Point(-1,-1), int iterations = 1,
                          int borderType = BORDER_CONSTANT,
                          const Scalar& borderValue = morphologyDefaultBorderValue() );

// 腐蚀
void erode( InputArray src, OutputArray dst, InputArray kernel,
                         Point anchor = Point(-1,-1), int iterations = 1,
                         int borderType = BORDER_CONSTANT,
                         const Scalar& borderValue = morphologyDefaultBorderValue() );

// 形态学核心函数
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() );

// 获取核
Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));

3、测试代码

膨胀

void test6() {
    Mat src = imread("D:/zi.png");
    cvtColor(src, src, CV_BGR2GRAY);
    threshold(src, src, 200, 255, THRESH_OTSU);
    Mat dilate_img;
    Mat kernel = getStructuringElement(MORPH_RECT, Size(9, 9));
    dilate(~src, dilate_img, kernel);
    imshow("binary", ~src);
    imshow("dilate_img", dilate_img);   
}
binary.png dilate_img.png

腐蚀

void test6() {
    Mat src = imread("D:/zi.png");
    cvtColor(src, src, CV_BGR2GRAY);
    threshold(src, src, 200, 255, THRESH_OTSU);
    Mat erode_img;
    Mat kernel = getStructuringElement(MORPH_RECT, Size(9, 9));
    erode(~src, erode_img, kernel);
    imshow("binary", ~src);
    imshow("erode_img", erode_img);
}
erode.png

开操作

void test6() {
    Mat src = imread("D:/gao.png");
    cvtColor(src, src, CV_BGR2GRAY);
    threshold(src, src, 200, 255, THRESH_OTSU);
    Mat open_img;
    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11));
    morphologyEx(~src, open_img,MORPH_OPEN,kernel);
    imshow("binary", ~src);
    imshow("open_img", open_img);
}
binary.png open_img.png

闭操作

void test6() {
    Mat src = imread("D:/gao.png");
    cvtColor(src, src, CV_BGR2GRAY);
    threshold(src, src, 200, 255, THRESH_OTSU);
    Mat close_img;
    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11));
    morphologyEx(~src, close_img, MORPH_CLOSE, kernel);
    imshow("binary", ~src);
    imshow("close_img", close_img);
}
close_img.png

顶帽

void test6() {
    Mat src = imread("D:/gao.png");
    cvtColor(src, src, CV_BGR2GRAY);
    threshold(src, src, 200, 255, THRESH_OTSU);
    Mat tophat_img;
    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11));
    morphologyEx(~src, tophat_img, MORPH_TOPHAT, kernel);
    imshow("binary", ~src);
    imshow("tophat_img", tophat_img);
}
tophat_img.png

黑帽

void test6() {
    Mat src = imread("D:/gao.png");
    cvtColor(src, src, CV_BGR2GRAY);
    threshold(src, src, 200, 255, THRESH_OTSU);
    Mat blackhat_img;
    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11));
    morphologyEx(~src, blackhat_img, MORPH_BLACKHAT, kernel);
    imshow("binary", ~src);
    imshow("blackhat_img", blackhat_img);
}
blackhat_img.png

相关文章

  • OpenCV图像处理(七)图像滤波(2)

    1、形态学滤波 简单来说,形态学操作就是基于形状的一系列图像处理操作,最基本的形态学操作:膨胀、腐蚀。在图像处理中...

  • OpenCV 之ios 图像平滑处理

    OpenCV 之ios 图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函...

  • 2019个人学习计划

    2019年努力... 1.OpenCV图像处理人脸识别滤波处理,基底层C++代码实现;微像素OpenCV图片处理-...

  • iOS OpenCV 图像灰度处理

    iOS OpenCV 图像灰度处理 iOS OpenCV 图像灰度处理

  • OpenCV 线性滤波

    线性滤波 图像滤波与滤波器 图像滤波,指的是在尽量保留图像特征的条件下对目标图像得噪声进行抑制,是图像处理当中不可...

  • 图像平滑处理

    图像平滑处理(Smoothing Images)图像模糊处理(Blurring Images)图像滤波(Image...

  • OpenCV图像处理(六)图像滤波(1)

    1、滤波的作用 图像滤波,是指尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,其处理的好坏直接影响到后续图像...

  • 卷积,滤波,平滑

    图像处理基本概念——卷积,滤波,平滑 图像卷积:一种实现手段,可以说是数学在图像处理的一种延伸。图像滤波:一种图像...

  • 博客收集

    1. 图像处理: 图像处理基本算法-形态学OpenCV-Pythonimage fusion 2. 图像数据: I...

  • 51cto 贾志刚 OpenCV图像处理从入门到精通系列专题8套

    【课程简介】 OpenCV图像处理从入门到精通系列专题 包含OpenCV图像处理, 图像特征提取与对象识别, 5个...

网友评论

      本文标题:OpenCV图像处理(七)图像滤波(2)

      本文链接:https://www.haomeiwen.com/subject/pcsacftx.html