前言

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

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

  函数原型:

  1. // 膨胀函数
  2. void cvcvDilate (
  3. IplImage *src,       // 待处理图像
  4. IplImage dst,        // 处理后图像
  5. IplConvKernel * B = NULL, // 自定义卷积核
  6. int iterations =    // 是否进行迭代
  7. );
  8.  
  9. // 腐蚀函数
  10. void cvErode (
  11. IplImage *src,       // 待处理图像
  12. IplImage dst,       // 处理后图像
  13. IplConvKernel * B = NULL, // 自定义卷积核
  14. int iterations =    // 是否进行迭代
  15. );

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

代码示例 - 膨胀

  1. // 此头文件包含图像IO函数的声明
  2. #include "highgui.h"
  3. // 此头文件包含基本的图像处理函数和高级计算机视觉算法
  4. #include "cv.h"
  5.  
  6. int main (void) {
  7.  
  8. // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
  9. IplImage * img = cvLoadImage ("D:\\1.jpg");
  10.  
  11. // 创建一个窗口显示处理前的图像
  12. cvNamedWindow ("膨胀前", CV_WINDOW_AUTOSIZE);
  13.  
  14. // 将图像装载进窗口并显示此窗口
  15. cvShowImage ("膨胀前", img);
  16.  
  17. // 创建一个新的图像内存块,以存放处理后的结果。
  18. IplImage * out = cvCreateImage (
  19. cvGetSize (img),
  20. img->depth,
  21. img->nChannels
  22. );
  23.  
  24. // 膨胀函数
  25. cvDilate (
  26. img,   // 输入图像
  27. out // 输出图像
  28. );
  29.  
  30. // 创建一个窗口显示处理后的图像
  31. cvNamedWindow ("膨胀后", CV_WINDOW_AUTOSIZE);
  32.  
  33. // 将图像装载进窗口并显示此窗口
  34. cvShowImage ("膨胀后", out);
  35.  
  36. // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
  37. // 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
  38. cvWaitKey ();
  39.  
  40. // 释放图像内存块
  41. cvReleaseImage (&img);
  42. cvReleaseImage (&out);
  43.  
  44. // 关闭窗口同时释放窗口内存块
  45. cvDestroyWindow ("膨胀前");
  46. cvDestroyWindow ("膨胀后");
  47.  
  48. return ;
  49. }

运行结果

  

代码示例 - 腐蚀

  1. // 此头文件包含图像IO函数的声明
  2. #include "highgui.h"
  3. // 此头文件包含基本的图像处理函数和高级计算机视觉算法
  4. #include "cv.h"
  5.  
  6. int main (void) {
  7.  
  8. // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
  9. IplImage * img = cvLoadImage ("D:\\1.jpg");
  10.  
  11. // 创建一个窗口显示处理前的图像
  12. cvNamedWindow ("腐蚀前", CV_WINDOW_AUTOSIZE);
  13.  
  14. // 将图像装载进窗口并显示此窗口
  15. cvShowImage ("腐蚀前", img);
  16.  
  17. // 创建一个新的图像内存块,以存放处理结果。
  18. IplImage * out = cvCreateImage (
  19. cvGetSize (img),
  20. img->depth,
  21. img->nChannels
  22. );
  23.  
  24. // 腐蚀函数
  25. cvErode (
  26. img,   // 输入图像
  27. out // 输出图像
  28. );
  29.  
  30. // 创建一个窗口显示处理后的图像
  31. cvNamedWindow ("腐蚀后", CV_WINDOW_AUTOSIZE);
  32.  
  33. // 将图像装载进窗口并显示此窗口
  34. cvShowImage ("腐蚀后", out);
  35.  
  36. // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
  37. // 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
  38. cvWaitKey ();
  39.  
  40. // 释放图像内存块
  41. cvReleaseImage (&img);
  42. cvReleaseImage (&out);
  43.  
  44. // 关闭窗口同时释放窗口内存块
  45. cvDestroyWindow ("腐蚀前");
  46. cvDestroyWindow ("腐蚀后");
  47.  
  48. return ;
  49. }

运行结果

  

小结

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

  在此不做累述。

膨胀和腐蚀 - 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. 【Visual Studio】“rc.exe”已退出,代码为 5 ("rc.exe" exited with code 5.)

    [解决方案]找到 rc.exe 所在目录,然后 方法1:添加该目录到 VC++ Directories --> Executable Directories中 方法2:添加到系统变量中的Path ...

  2. linux安全机制学习【转】

    转自:http://blog.csdn.net/qq_20307987/article/details/51307820 曾经一度想学来着,今天看到一个链接,讲的很好,算是写一下加深印象吧 1 栈溢出 ...

  3. javascript 之 className属性

    Javascript 可以通过className 属性灵活的更改一个标签元素的CSS 类选择器来实现样式的变化. 1.用className 属性修改节点的css类别 代码如下: <html> ...

  4. LeetCode OJ-- Maximum Depth of Binary Tree

    https://oj.leetcode.com/problems/maximum-depth-of-binary-tree/ 求二叉树的最大深度 深度优先搜索 /** * Definition for ...

  5. AC日记——宠物收养所 bzoj 1208

    1208 思路: 一棵splay树: 如果来者是宠物且树空,就将其加入树中: 如果树不空,则查找前驱后继,取最优,然后删点: 对人亦然: 注意边界和取模,最后的ans用long long其余用int即 ...

  6. 安全性测试入门 (四):Session Hijacking 用户会话劫持的攻击和防御

    本篇继续对于安全性测试话题,结合DVWA进行研习. Session Hijacking用户会话劫持 1. Session和Cookies 这篇严格来说是用户会话劫持诸多情况中的一种,通过会话标识规则来 ...

  7. POJ 3249 Test for Job (dfs + dp)

    题目链接:http://poj.org/problem?id=3249 题意: 给你一个DAG图,问你入度为0的点到出度为0的点的最长路是多少 思路: 记忆化搜索,注意v[i]可以是负的,所以初始值要 ...

  8. 基于WPF系统框架设计(5)-Ribbon整合Avalondock 2.0实现多文档界面设计(二)

    AvalonDock 是一个.NET库,用于在停靠模式布局(docking)中排列一系列WPF/WinForm控件.最新发布的版本原生支持MVVM框架.Aero Snap特效并具有更好的性能. Ava ...

  9. ios6.0 siri语音识别

    Siri 让你能够利用语音来完成发送信息.安排会议.拨打电话等更多事务* .只需像平常一样讲话,就能让 Siri 帮你做事.你会发现 Siri 是如此易用而且能干,精彩用法越用你会发现越多. 懂你所说 ...

  10. Android Spinner In Toolbar

    As the title of the post suggest in this tutorial we will see how to have spinner widget inside the ...