• OpenCV 图像处理 (线性滤波,非线性滤波


    1 线性滤波:方框滤波、均值滤波、高斯滤波



    1.1方框滤波(box Filter)

    1.2均值滤波(blur函数)

    缺陷:


    1.3高斯滤波(GaussianBlur函数)

    1.4线性滤波核心API函数

    boxFilter

     1 #include "opencv2/core/core.hpp" 
     2 #include "opencv2/highgui/highgui.hpp" 
     3 #include "opencv2/imgproc/imgproc.hpp" 
     4 using namespace cv;
     5 
     6 //-----------------------------------【main( )函数】--------------------------------------------
     7 //    描述:控制台应用程序的入口函数,我们的程序从这里开始
     8 //-----------------------------------------------------------------------------------------------
     9 int main()
    10 {
    11     // 载入原图
    12     Mat image = imread("1.jpg");
    13 
    14     //创建窗口
    15     namedWindow("方框滤波【原图】");
    16     namedWindow("方框滤波【效果图】");
    17 
    18     //显示原图
    19     imshow("方框滤波【原图】", image);
    20 
    21     //进行方框滤波操作
    22     Mat out;
    23     boxFilter(image, out, -1, Size(5, 5));
    24 
    25     //显示效果图
    26     imshow("方框滤波【效果图】", out);
    27 
    28     waitKey(0);
    29 }

    blur

     1 #include "opencv2/highgui/highgui.hpp" 
     2 #include "opencv2/imgproc/imgproc.hpp" 
     3 using namespace cv; 
     4 
     5 //-----------------------------------【main( )函数】--------------------------------------------
     6 //        描述:控制台应用程序的入口函数,我们的程序从这里开始
     7 //-----------------------------------------------------------------------------------------------
     8 int main( )
     9 { 
    10     //【1】载入原始图
    11     Mat srcImage=imread("1.jpg"); 
    12 
    13     //【2】显示原始图
    14     imshow( "均值滤波【原图】", srcImage ); 
    15 
    16     //【3】进行均值滤波操作
    17     Mat dstImage; 
    18     blur( srcImage, dstImage, Size(7, 7)); 
    19 
    20     //【4】显示效果图
    21     imshow( "均值滤波【效果图】" ,dstImage ); 
    22 
    23     waitKey( 0 );     
    24 } 

    GaussianBlur

     1 #include "opencv2/core/core.hpp" 
     2 #include "opencv2/highgui/highgui.hpp" 
     3 #include "opencv2/imgproc/imgproc.hpp" 
     4 using namespace cv; 
     5 
     6 //-----------------------------------【main( )函数】--------------------------------------------
     7 //    描述:控制台应用程序的入口函数,我们的程序从这里开始
     8 //-----------------------------------------------------------------------------------------------
     9 int main( )
    10 { 
    11     // 载入原图
    12     Mat image=imread("1.jpg"); 
    13 
    14     //创建窗口
    15     namedWindow( "高斯滤波【原图】" ); 
    16     namedWindow( "高斯滤波【效果图】"); 
    17 
    18     //显示原图
    19     imshow( "高斯滤波【原图】", image ); 
    20 
    21     //进行高斯滤波操作
    22     Mat out; 
    23     GaussianBlur( image, out, Size( 5, 5 ), 0, 0 ); 
    24 
    25     //显示效果图
    26     imshow( "高斯滤波【效果图】" ,out ); 
    27 
    28     waitKey( 0 );     
    29 } 

    综合实例

      1 #include <opencv2/core/core.hpp>
      2 #include <opencv2/highgui/highgui.hpp>
      3 #include <opencv2/imgproc/imgproc.hpp>
      4 #include <iostream>
      5 
      6 using namespace std;
      7 using namespace cv;
      8 
      9 
     10 //-----------------------------------【全局变量声明部分】--------------------------------------
     11 //    描述:全局变量声明
     12 //-----------------------------------------------------------------------------------------------
     13 Mat g_srcImage, g_dstImage1, g_dstImage2, g_dstImage3;//存储图片的Mat类型
     14 int g_nBoxFilterValue = 3;  //方框滤波参数值
     15 int g_nMeanBlurValue = 3;  //均值滤波参数值
     16 int g_nGaussianBlurValue = 3;  //高斯滤波参数值
     17 
     18 
     19 //-----------------------------------【全局函数声明部分】--------------------------------------
     20 //    描述:全局函数声明
     21 //-----------------------------------------------------------------------------------------------
     22 //四个轨迹条的回调函数
     23 static void on_BoxFilter(int, void *);        //均值滤波
     24 static void on_MeanBlur(int, void *);        //均值滤波
     25 static void on_GaussianBlur(int, void *);            //高斯滤波
     26 void ShowHelpText();
     27 
     28 
     29 //-----------------------------------【main( )函数】--------------------------------------------
     30 //    描述:控制台应用程序的入口函数,我们的程序从这里开始
     31 //-----------------------------------------------------------------------------------------------
     32 int main()
     33 {
     34     //改变console字体颜色
     35     system("color 5F");
     36 
     37     //输出帮助文字
     38     ShowHelpText();
     39 
     40     // 载入原图
     41     g_srcImage = imread("1.jpg", 1);
     42     if (!g_srcImage.data) { printf("Oh,no,读取srcImage错误~! 
    "); return false; }
     43 
     44     //克隆原图到三个Mat类型中
     45     g_dstImage1 = g_srcImage.clone();
     46     g_dstImage2 = g_srcImage.clone();
     47     g_dstImage3 = g_srcImage.clone();
     48 
     49     //显示原图
     50     namedWindow("【<0>原图窗口】", 1);
     51     imshow("【<0>原图窗口】", g_srcImage);
     52 
     53 
     54     //=================【<1>方框滤波】==================
     55     //创建窗口
     56     namedWindow("【<1>方框滤波】", 1);
     57     //创建轨迹条
     58     createTrackbar("内核值:", "【<1>方框滤波】", &g_nBoxFilterValue, 40, on_BoxFilter);
     59     on_MeanBlur(g_nBoxFilterValue, 0);
     60     imshow("【<1>方框滤波】", g_dstImage1);
     61     //================================================
     62 
     63     //=================【<2>均值滤波】==================
     64     //创建窗口
     65     namedWindow("【<2>均值滤波】", 1);
     66     //创建轨迹条
     67     createTrackbar("内核值:", "【<2>均值滤波】", &g_nMeanBlurValue, 40, on_MeanBlur);
     68     on_MeanBlur(g_nMeanBlurValue, 0);
     69     //================================================
     70 
     71     //=================【<3>高斯滤波】=====================
     72     //创建窗口
     73     namedWindow("【<3>高斯滤波】", 1);
     74     //创建轨迹条
     75     createTrackbar("内核值:", "【<3>高斯滤波】", &g_nGaussianBlurValue, 40, on_GaussianBlur);
     76     on_GaussianBlur(g_nGaussianBlurValue, 0);
     77     //================================================
     78 
     79 
     80     //输出一些帮助信息
     81     cout << endl << "	运行成功,请调整滚动条观察图像效果~
    
    "
     82         << "	按下“q”键时,程序退出。
    ";
     83 
     84     //按下“q”键时,程序退出
     85     while (char(waitKey(1)) != 'q') {}
     86 
     87     return 0;
     88 }
     89 
     90 
     91 //-----------------------------【on_BoxFilter( )函数】------------------------------------
     92 //    描述:方框滤波操作的回调函数
     93 //-----------------------------------------------------------------------------------------------
     94 static void on_BoxFilter(int, void *)
     95 {
     96     //方框滤波操作
     97     boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilterValue + 1, g_nBoxFilterValue + 1));
     98     //显示窗口
     99     imshow("【<1>方框滤波】", g_dstImage1);
    100 }
    101 
    102 
    103 //-----------------------------【on_MeanBlur( )函数】------------------------------------
    104 //    描述:均值滤波操作的回调函数
    105 //-----------------------------------------------------------------------------------------------
    106 static void on_MeanBlur(int, void *)
    107 {
    108     //均值滤波操作
    109     blur(g_srcImage, g_dstImage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1), Point(-1, -1));
    110     //显示窗口
    111     imshow("【<2>均值滤波】", g_dstImage2);
    112 }
    113 
    114 
    115 //-----------------------------【ContrastAndBright( )函数】------------------------------------
    116 //    描述:高斯滤波操作的回调函数
    117 //-----------------------------------------------------------------------------------------------
    118 static void on_GaussianBlur(int, void *)
    119 {
    120     //高斯滤波操作
    121     GaussianBlur(g_srcImage, g_dstImage3, Size(g_nGaussianBlurValue * 2 + 1, g_nGaussianBlurValue * 2 + 1), 0, 0);
    122     //显示窗口
    123     imshow("【<3>高斯滤波】", g_dstImage3);
    124 }
    125 
    126 
    127 //-----------------------------------【ShowHelpText( )函数】----------------------------------
    128 //         描述:输出一些帮助信息
    129 //----------------------------------------------------------------------------------------------
    130 void ShowHelpText()
    131 {
    132     //输出欢迎信息和OpenCV版本 
    133     printf("
    
    			   当前使用的OpenCV版本为:" CV_VERSION);
    134     printf("
    
      ----------------------------------------------------------------------------
    ");
    135 }

    非线性滤波(中值滤波,双边滤波)


    中值滤波(Median filter)(medianBlur函数)






     1 #include "opencv2/core/core.hpp" 
     2 #include "opencv2/highgui/highgui.hpp" 
     3 #include "opencv2/imgproc/imgproc.hpp" 
     4 
     5 //-----------------------------------【命名空间声明部分】---------------------------------------
     6 //    描述:包含程序所使用的命名空间
     7 //-----------------------------------------------------------------------------------------------  
     8 using namespace cv;
     9 
    10 //-----------------------------------【main( )函数】--------------------------------------------
    11 //    描述:控制台应用程序的入口函数,我们的程序从这里开始
    12 //-----------------------------------------------------------------------------------------------
    13 int main()
    14 {
    15     // 载入原图
    16     Mat image = imread("1.jpg");
    17 
    18     //创建窗口
    19     namedWindow("中值滤波【原图】");
    20     namedWindow("中值滤波【效果图】");
    21 
    22     //显示原图
    23     imshow("中值滤波【原图】", image);
    24 
    25     //进行中值滤波操作
    26     Mat out;
    27     medianBlur(image, out, 7);
    28 
    29     //显示效果图
    30     imshow("中值滤波【效果图】", out);
    31 
    32     waitKey(0);
    33 }

    双边滤波(Bilateral filter)(bilateralFilter函数)



     1 #include "opencv2/core/core.hpp" 
     2 #include "opencv2/highgui/highgui.hpp" 
     3 #include "opencv2/imgproc/imgproc.hpp" 
     4 
     5 //-----------------------------------【命名空间声明部分】---------------------------------------
     6 //    描述:包含程序所使用的命名空间
     7 //-----------------------------------------------------------------------------------------------  
     8 using namespace cv; 
     9 
    10 //-----------------------------------【main( )函数】--------------------------------------------
    11 //    描述:控制台应用程序的入口函数,我们的程序从这里开始
    12 //-----------------------------------------------------------------------------------------------
    13 int main( )
    14 { 
    15     // 载入原图
    16     Mat image=imread("1.jpg"); 
    17 
    18     //创建窗口
    19     namedWindow( "双边滤波【原图】" ); 
    20     namedWindow( "双边滤波【效果图】"); 
    21 
    22     //显示原图
    23     imshow( "双边滤波【原图】", image ); 
    24 
    25     //进行双边滤波操作
    26     Mat out; 
    27     bilateralFilter ( image, out, 25, 25*2, 25/2 ); 
    28 
    29     //显示效果图
    30     imshow( "双边滤波【效果图】" ,out ); 
    31 
    32     waitKey( 0 );     
    33 } 

     

  • 相关阅读:
    启动mysql时显示:/tmp/mysql.sock 不存在的解决方法
    python在使用MySQLdb模块时报Can't extract file(s) to egg cacheThe following error occurred while trying to extract file(s) to the Python eggcache的错误。
    文档发布测试
    我的日常
    CSS-基础优化策略
    Git-基本操作
    Git-配置SSH公钥
    Git-免密提交
    Wx-mpvue开发小程序
    Vue-移动端开发全家桶
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12822185.html
Copyright © 2020-2023  润新知