前言

  膨胀就是对图中的每个像素取其核范围内最大的那个值,腐蚀就相反。这两个操作常用来突出显示图的某个高亮部分或者昏暗部分以及去噪。本文展示两个分别对图像进行膨胀和腐蚀的例子。

膨胀和腐蚀函数 cvErode() 和 cvDilate()

  函数原型:

 // 膨胀函数
void cvcvDilate (
IplImage *src,       // 待处理图像
IplImage dst,        // 处理后图像
IplConvKernel * B = NULL, // 自定义卷积核
int iterations =    // 是否进行迭代
); // 腐蚀函数
void cvErode (
IplImage *src,       // 待处理图像
IplImage dst,       // 处理后图像
IplConvKernel * B = NULL, // 自定义卷积核
int iterations =    // 是否进行迭代
);

  一般来说,后面两个参数用的不多,就用它的默认参数好了。

代码示例 - 膨胀

 // 此头文件包含图像IO函数的声明
#include "highgui.h"
// 此头文件包含基本的图像处理函数和高级计算机视觉算法
#include "cv.h" int main (void) { // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
IplImage * img = cvLoadImage ("D:\\1.jpg"); // 创建一个窗口显示处理前的图像
cvNamedWindow ("膨胀前", CV_WINDOW_AUTOSIZE); // 将图像装载进窗口并显示此窗口
cvShowImage ("膨胀前", img); // 创建一个新的图像内存块,以存放处理后的结果。
IplImage * out = cvCreateImage (
cvGetSize (img),
img->depth,
img->nChannels
); // 膨胀函数
cvDilate (
img,   // 输入图像
out // 输出图像
); // 创建一个窗口显示处理后的图像
cvNamedWindow ("膨胀后", CV_WINDOW_AUTOSIZE); // 将图像装载进窗口并显示此窗口
cvShowImage ("膨胀后", out); // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
// 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
cvWaitKey (); // 释放图像内存块
cvReleaseImage (&img);
cvReleaseImage (&out); // 关闭窗口同时释放窗口内存块
cvDestroyWindow ("膨胀前");
cvDestroyWindow ("膨胀后"); return ;
}

运行结果

  

代码示例 - 腐蚀

 // 此头文件包含图像IO函数的声明
#include "highgui.h"
// 此头文件包含基本的图像处理函数和高级计算机视觉算法
#include "cv.h" int main (void) { // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
IplImage * img = cvLoadImage ("D:\\1.jpg"); // 创建一个窗口显示处理前的图像
cvNamedWindow ("腐蚀前", CV_WINDOW_AUTOSIZE); // 将图像装载进窗口并显示此窗口
cvShowImage ("腐蚀前", img); // 创建一个新的图像内存块,以存放处理结果。
IplImage * out = cvCreateImage (
cvGetSize (img),
img->depth,
img->nChannels
); // 腐蚀函数
cvErode (
img,   // 输入图像
out // 输出图像
); // 创建一个窗口显示处理后的图像
cvNamedWindow ("腐蚀后", CV_WINDOW_AUTOSIZE); // 将图像装载进窗口并显示此窗口
cvShowImage ("腐蚀后", out); // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
// 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
cvWaitKey (); // 释放图像内存块
cvReleaseImage (&img);
cvReleaseImage (&out); // 关闭窗口同时释放窗口内存块
cvDestroyWindow ("腐蚀前");
cvDestroyWindow ("腐蚀后"); return ;
}

运行结果

  

小结

  基于这两个操作,能产生诸如开运算,闭运算等更加复杂的运算。

  在此不做累述。

膨胀和腐蚀 - cvErode() 和 cvDilate() 函数实现的更多相关文章

  1. cvErode和cvDilate腐蚀和膨胀函数

    Erode腐蚀,Dilate膨胀,这两个形态学函数总是成对出现,前者可以消除较小独点如噪音,后者可以使不连通的图像合并成块. void cvErode( const CvArr* src, CvArr ...

  2. OpenCV膨胀和腐蚀示例代码

    #include<cv.h> #include<highgui.h> int main(int argc, char** argv) { IplImage* img = cvL ...

  3. 学习 opencv---(9)形态学图像处理(一):膨胀和腐蚀

    本篇文章中,我们一起探究了图像处理中,最基本的形态学运算--膨胀与腐蚀.浅墨在文章开头友情提醒,用人物照片做腐蚀和膨胀的素材图片得到的效果会比较惊悚,毁三观的,不建议尝试.......... 一.理论 ...

  4. 图像的膨胀与腐蚀——OpenCV与C++的具体实现

    目录 1. 膨胀与腐蚀的原理 2. 膨胀的具体实现 1) OpenCV实现 2) C/C++实现 3) 验证与结果 3. 腐蚀的具体实现 1. 膨胀与腐蚀的原理 膨胀与腐蚀是数学形态学在图像处理中最基 ...

  5. OpenCV膨胀与腐蚀

    膨胀与腐蚀 本篇博客主要介绍使用OpenCV中的函数接口实现对一个图片的腐蚀或者膨胀,听起来有点像是对图像进行放大和缩小的意思,如果你也是这样认为,那我只能说你跟我一样肤浅!!在OpenCV中几乎所有 ...

  6. 膨胀、腐蚀、开、闭(matlab实现)

    膨胀.腐蚀.开.闭运算是数学形态学最基本的变换. 本文主要针对二值图像的形态学 膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔): B=[0 1 0      1 1 1   ...

  7. Atitit 图像处理—图像形态学(膨胀与腐蚀)

    Atitit 图像处理-图像形态学(膨胀与腐蚀) 1.1. 膨胀与腐蚀1 1.2. 图像处理之二值膨胀及应用2 1.3. 测试原理,可以给一个5*5pic,测试膨胀算法5 1.4. Photoshop ...

  8. paper 76:膨胀、腐蚀、开、闭运算——数字图像处理中的形态学

    膨胀.腐蚀.开.闭运算是数学形态学最基本的变换.本文主要针对二值图像的形态学膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔):腐蚀:把二值图像各1像素连接成分的边界点去掉从而 ...

  9. OpenCV——图像处理入门:膨胀与腐蚀、图像模糊、边缘检测

    全部外部依赖项: opencv_aruco341d.lib opencv_bgsegm341d.lib opencv_calib3d341d.lib opencv_bioinspired341d.li ...

随机推荐

  1. hdu 4786(生成树)

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. 洛谷 P1478 陶陶摘苹果(升级版)【贪心/结构体排序/可用01背包待补】

    [链接]:https://www.luogu.org/problemnew/show/P1478 题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他 ...

  3. tomcat7.0.55配置HTTP强制跳转到HTTPS

    首先需要配置好HTTPS单向或双向链接 参考: tomcat7.0.55配置单向和双向HTTPS连接(二) 然后编辑tomcat的conf目录下的web.xml 在<welcome-file-l ...

  4. 转:一个经典例子让你彻彻底底理解java回调机制

    一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...

  5. 代码统计利器--CLOC

    MAC下安装命令:$ brew install cloc 其他的linux安装 $ aptitude install cloc 使用方法.到目录下运行: $ cloc . The default ou ...

  6. 一个完整的Core Data应用

    在这篇文章中,我们将建立一个小型但却全面支持Core Data的应用.应用允许你创建嵌套的列表:每个列表的item都可以有子列表,这将允许你创建非常深层次的item.为了让大家完整的了解发生了什么,我 ...

  7. Android Retrofit使用教程(二)

    上一篇文章讲述了Retrofit的简单使用,这次我们学习一下Retrofit的各种HTTP请求. Retrofit基础 在Retrofit中使用注解的方式来区分请求类型.比如@GET("&q ...

  8. Ethernet帧格式

    一.Ethernet帧格式的发展 1980 DEC,Intel,Xerox制订了Ethernet I的标准 1982 DEC,Intel,Xerox又制订了Ehternet II的标准 1982 IE ...

  9. springMVC --配置具体与注讲解明

    <?xml version="1.0" encoding="UTF-8"? > <beans xmlns="http://www.s ...

  10. 软件业的发展方向:云、Web以及App

    随着行业互联网的发展,未来的软件发展方向是云技术.Web软件以及基于移动设备的Apps. 桌面软件主要负责大型的计算.渲染和消耗非常大CPU和内存的图形软件,以及基于这些软件的二次开发软件如Revit ...