zoukankan      html  css  js  c++  java
  • 膨胀和腐蚀

    前言

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

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

      函数原型:

     1 // 膨胀函数
     2 void cvcvDilate (
     3     IplImage *src,          // 待处理图像
     4     IplImage dst,           // 处理后图像
     5     IplConvKernel * B = NULL,   // 自定义卷积核
     6     int iterations = 1        // 是否进行迭代
     7 );
     8 
     9 // 腐蚀函数
    10 void cvErode (
    11     IplImage *src,          // 待处理图像
    12     IplImage dst,          // 处理后图像
    13     IplConvKernel * B = NULL,  // 自定义卷积核
    14     int iterations = 1       // 是否进行迭代
    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 (0);
    39 
    40     // 释放图像内存块
    41     cvReleaseImage (&img);
    42     cvReleaseImage (&out);
    43 
    44     // 关闭窗口同时释放窗口内存块
    45     cvDestroyWindow ("膨胀前");
    46     cvDestroyWindow ("膨胀后");
    47 
    48     return 0;
    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 (0);
    39 
    40     // 释放图像内存块
    41     cvReleaseImage (&img);
    42     cvReleaseImage (&out);
    43 
    44     // 关闭窗口同时释放窗口内存块
    45     cvDestroyWindow ("腐蚀");
    46     cvDestroyWindow ("腐蚀");
    47 
    48     return 0;
    49 }

    运行结果

       

    小结

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

      在此不做累述。

  • 相关阅读:
    CentOS中用top命令CPU负载
    Oracle文档阅读指南
    修改oracle用户密码永不过期
    让secureCRT以命令行方式启动图形界面
    .NET 2.0 SQL依赖注意事项(转载:原文《使用SQL Server 2005 Query Notification的几个注意事项》)
    SQL Server 2005服务状态管理工具
    一个常用的正则表达验证类
    解决TFS中MSBuild开发项目和开发编译中一些冲突(小技巧)
    ASP.NET 2.0 WebService中传递DataTable参考
    LightningFramework系列(各层详细设计类图)
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3746311.html
Copyright © 2011-2022 走看看