腐蚀和膨胀属于形态学操作。

腐蚀和膨胀

腐蚀是指:将卷积核B滑过图像A,找出卷积核区域内最小像素值作为锚点像素值。这一操作可以扩大低像素值区域。

膨胀是指:将卷积核B滑过图像A,找出卷积核区域内最大像素值作为锚点像素值。这一操作可以缩小低像素值区域。

通过前面的卷积可以看出,膨胀相当于“最大值”滤波器,腐蚀相当于”最小值“滤波器。滤波器的形状我们可以自己定义。

其他形态学操作

开运算

先对图像腐蚀,再膨胀

\[\texttt{dst} = \mathrm{open} ( \texttt{src} , \texttt{element} )= \mathrm{dilate} ( \mathrm{erode} ( \texttt{src} , \texttt{element} ))
\]

闭运算

先膨胀再腐蚀

\[\texttt{dst} = \mathrm{close} ( \texttt{src} , \texttt{element} )= \mathrm{erode} ( \mathrm{dilate} ( \texttt{src} , \texttt{element} ))
\]

形态梯度

膨胀图和腐蚀图之差

\[\texttt{dst} = \mathrm{morph\_grad} ( \texttt{src} , \texttt{element} )= \mathrm{dilate} ( \texttt{src} , \texttt{element} )- \mathrm{erode} ( \texttt{src} , \texttt{element} )
\]

顶冒

原图和开运算图之差

\[\texttt{dst} = \mathrm{tophat} ( \texttt{src} , \texttt{element} )= \texttt{src} - \mathrm{open} ( \texttt{src} , \texttt{element} )
\]

黑冒

闭运算结果和原图之差

\[\texttt{dst} = \mathrm{blackhat} ( \texttt{src} , \texttt{element} )= \mathrm{close} ( \texttt{src} , \texttt{element} )- \texttt{src}
\]

实验代码

常用函数

Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1))

获取卷积核,卷积核中,对应形状位置的元素都为1.

shape:

MORPH_RECT:矩形

MORPH_ELLIPSE:椭圆

MORPH_CROSS:十字形

ksize:

核大小

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:操作MORPH_OPEN开运算,MORPH_CLOSE闭运算、MORPH_GRADIENT形态梯度、MORPH_TOPHAT钉帽、MORPH_BLACKHAT黑冒

代码

#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp> using namespace cv;
using namespace std; int main(int argc, char* argv[]){
const char* path = "";
Mat img = imread(path);
if (!img.data){
cout << "Wrong Image" << endl;
return -1;
} Mat kern = getStructuringElement(MORPH_RECT, Size(5, 5)); Mat erosion_img, dilate_img;
//腐蚀
erode(img, erosion_img, kern);
//膨胀
dilate(img, dilate_img, kern); imshow("original image", img);
imshow("erosion image", erosion_img);
imshow("dilate image", dilate_img); Mat open_mat, close_mat, gradient_mat, tophat_mat, blackhat_mat;
morphologyEx(img, open_mat, MORPH_OPEN, kern);
morphologyEx(img, close_mat, MORPH_CLOSE, kern);
morphologyEx(img, gradient_mat, MORPH_GRADIENT, kern);
morphologyEx(img, tophat_mat, MORPH_TOPHAT, kern);
morphologyEx(img, blackhat_mat, MORPH_BLACKHAT, kern); imshow("Opening", open_mat);
imshow("Closing", close_mat);
imshow("Grandient", gradient_mat);
imshow("Tohat", tophat_mat);
imshow("Black", blackhat_mat); cvWaitKey(0);
return 0;
}

OpenCV(6)-腐蚀和膨胀的更多相关文章

  1. Opencv,腐蚀,膨胀,轮廓检测,轮廓外接多边形

    //形态学腐蚀 cvErode(pDstImage,pDstImage,,); //形态学膨胀 cvDilate(pDstImage,pDstImage,,); //中值滤波 cvSmooth(pDs ...

  2. OpenCV学习(10) 图像的腐蚀与膨胀(1)

    建议大家看看网络视频教程:http://www.opencvchina.com/thread-886-1-1.html    腐蚀与膨胀都是针对灰度图的形态学操作,比如下面的一副16*16的灰度图. ...

  3. OpenCV腐蚀与膨胀(Eroding and Dilating)

    腐蚀与膨胀(Eroding and Dilating) 目标 本文档尝试解答如下问题: 如何使用OpenCV提供的两种最基本的形态学操作,腐蚀与膨胀( Erosion 与 Dilation): ero ...

  4. OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等)

    转自:OpenCV 教程 另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009) 平滑图像:滤波器 平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法.平滑处理的 ...

  5. OpenCV图像处理篇之腐蚀与膨胀

    转载请注明出处:http://xiahouzuoxin.github.io/notes 腐蚀与膨胀 腐蚀和膨胀是图像的形态学处理中最主要的操作,之后遇见的开操作和闭操作都是腐蚀和膨胀操作的结合运算. ...

  6. opencv 4 图像处理(2 形态学滤波:腐蚀与膨胀,开运算、闭运算、形态学梯度、顶帽、黑帽)

    腐蚀与膨胀 膨胀(求局部最大值)(dilate函数) #include <opencv2/core/core.hpp> #include <opencv2/highgui/highg ...

  7. OpenCV学习笔记——图像的腐蚀与膨胀

    顺便又复习了一下cvcopy如何进行图像拼接(最近觉得打开多幅图像分别看不如缩小掉放拼接到一幅图像上对比来的好) 首先把拼接的目标图像设置兴趣区域ROI,比如我有一个total,要把a.b.c分别从左 ...

  8. OpenCV学习 7:图像形态学:腐蚀、膨胀

    原创文章,欢迎转载,转载请注明出处 首先什么是图像形态学?额,这个抄下百度到的答案.基本思想:    用具有一定形态的结构元素去度量和提取图像中的对应形状已达到对图像分析和识别的目的,形态学图像处理表 ...

  9. Java基于opencv实现图像数字识别(五)—腐蚀、膨胀处理

    腐蚀:去除图像表面像素,将图像逐步缩小,以达到消去点状图像的效果:作用就是将图像边缘的毛刺剔除掉 膨胀:将图像表面不断扩散以达到去除小孔的效果:作用就是将目标的边缘或者是内部的坑填掉 使用相同次数的腐 ...

随机推荐

  1. 如何把.rar文件隐藏在一个图片内

    首先假设我们要隐藏的.rar文件叫a.rar,图片叫a.jpg.先把他俩放到同一个目录下,然后通过“cmd”进入windows命令行,进入目标目录下,使用以下命令进行隐藏: copy/B  a.jpg ...

  2. Win7 64位 安装E10后 打不开的解决方案 -摘自网络

    但是后来发现点击IE图标没有任何反应,因此从网络上寻求帮助!将经验分享大家!进入注册表(运行regedit),找到 HKEY_CURRENT_USER\Software\Microsoft\Inter ...

  3. JVM 进行线程同步背后的原理

    前言 所有的 Java 程序都会被翻译为包含字节码的 class 文件,字节码是 JVM 的机器语言.这篇文章将阐述 JVM 是如何处理线程同步以及相关的字节码. 线程和共享数据 Java 的一个优点 ...

  4. 教程-Delphi操作快捷键

    ************************************************************** Delphi快捷键-全-高手用-南山古桃(新手)-同学共进 ******* ...

  5. nyoj 540 奇怪的排序

    奇怪的排序 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 最近,Dr. Kong 新设计一个机器人Bill.这台机器人很聪明,会做许多事情.惟独对自然数的理解与人类 ...

  6. FFT(快速傅立叶算法 for java)

    package com.test.test2; public class FFT {     public static final int FFT_N_LOG = 10; // FFT_N_LOG ...

  7. 使用freemarker生成html

    http://herryhaixiao.iteye.com/blog/677524 由于freemarker这个技术很久很久就有了,注释我就没写得很详细了,相信大家都看得懂.下面就直接上代码以及一些代 ...

  8. android 数据库的升级与降级解决方案

    在我们写的程序中不避免的需要升级.或者说需要改变业务逻辑,那这个时候就需要修改数据库的字段,来适应不同的表结构 我们一般写数据库都是操作一个继承至 SQLiteOpenHelper 的类 然后我们需要 ...

  9. ThinkPHP3.1新特性:Action参数绑定

    Action参数绑定功能提供了URL变量和操作方法的参数绑定支持,这一功能可以使得你的操作方法定义和参数获取更加清晰,也便于跨模块调用操作方法了.这一新特性对以往的操作方法使用没有任何影响,你也可以用 ...

  10. CardsTube/YouTubePlaylist

    CardsTube https://github.com/DesarrolloAntonio/CardsTube YouTubePlaylist https://github.com/akoscz/Y ...