<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      OpenCV 2.4+ C++ 平滑處理

      2012-11-21 15:45  Justany_WhiteSnow  閱讀(21556)  評論(2)    收藏  舉報

      原理

      平滑也稱模糊, 是一項簡單且使用頻率很高的圖像處理方法。

      平滑處理時需要用到一個濾波器。 最常用的濾波器是線性濾波器,線性濾波處理的輸出像素值(例如:g(i,j))是輸入像素值(例如:f(i+k,j+l))的加權平均:

          g(i,j) = \sum_{k,l} f(i+k, j+l) h(k,l)

      h(k,l)稱為核, 它僅僅是一個加權系數。

       

      均值平滑

      下面是一個使用blur函數的均值平滑:

      #include "opencv2/core/core.hpp"
      
      #include "opencv2/highgui/highgui.hpp"
      
      #include "opencv2/imgproc/imgproc.hpp"
      
      #include <stdio.h>
      
      using namespace cv;
      
      int main( int argc, char** argv ){
          Mat image;
          image = imread( argv[1]);
      
          if( argc != 2 || !image.data ){
              printf("沒有圖片\n");
              return -1;
          }
          
          namedWindow( "平滑處理-輸入" );
          namedWindow( "平滑處理-輸出" );
          
          imshow( "平滑處理-輸入", image );
          
          Mat out;
          
          blur( image, out, Size(3, 3));
      
          imshow( "平滑處理-輸出", out );
      
          waitKey( 0 );    
      }

      blur函數API資料:

      使用歸一化塊濾波器進行模糊圖片操作。

      C++: void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )
      參數
      • src – 輸入圖片,可以使是任意通道數,該函數對通道是獨立處理的,但是深度只能是CV_8U, CV_16U, CV_16S, CV_32F or CV_64F。
      • dst – 輸出圖片,和輸入圖片相同大小和深度。
      • ksize – 模糊內核大小。
      • anchor – 錨點,默認值是(-1,-1),也就是錨點在內核的中心。
      • borderType – 用于判斷圖像邊界的模式。

      該函數對圖片進行平滑處理利用了下面的內核:

      \texttt{K} =  \frac{1}{\texttt{ksize.width*ksize.height}} \begin{bmatrix} 1 & 1 & 1 &  \cdots & 1 & 1  \\ 1 & 1 & 1 &  \cdots & 1 & 1  \\ \hdotsfor{6} \\ 1 & 1 & 1 &  \cdots & 1 & 1  \\ \end{bmatrix}

      調用blur(src, dst, ksize, anchor, borderType)相當于調用boxFilter(src, dst, src.type(), anchor, true, borderType)。

      blur使用的是歸一化塊濾波器,輸出像素值是核窗口內像素值的均值( 所有像素加權系數相等)。

       

      高斯平滑

      下面代碼使用了GaussianBlur來實現平滑:

      #include "opencv2/core/core.hpp"
      
      #include "opencv2/highgui/highgui.hpp"
      
      #include "opencv2/imgproc/imgproc.hpp"
      
      #include <stdio.h>
      
      using namespace std;
      using namespace cv;

      int main( int argc, char** argv ){ Mat image; image = imread( argv[1]); if( argc != 2 || !image.data ){ printf("沒有圖片\n"); return -1; } namedWindow( "平滑處理-輸入" ); namedWindow( "平滑處理-輸出" ); imshow( "平滑處理-輸入", image ); Mat out; GaussianBlur( image, out, Size( 3, 3 ), 0, 0 ); imshow( "平滑處理-輸出", out ); waitKey( 0 ); }

      GaussianBlur函數API資料:

      使用高斯濾波器進行模糊操作

      C++: void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT)
      參數
      • src – 輸入圖片,可以使是任意通道數,該函數對通道是獨立處理的,但是深度只能是CV_8UCV_16UCV_16SCV_32F or CV_64F.
      • dst – 輸出圖片,和輸入圖片相同大小和深度。
      • ksize – 高斯內核大小。ksize.widthksize.height允許不相同但他們必須是正奇數。或者等于0,由參數sigma的乘機決定。
      • sigmaX – 高斯內核在X方向的標準偏差。
      • sigmaY – 高斯內核在Y方向的標準偏差。如果sigmaY為0,他將和sigmaX的值相同,如果他們都為0,那么他們由ksize.widthksize.height計算得出。
      • borderType – 用于判斷圖像邊界的模式。

      最有用的濾波器 (盡管不是最快的)。 高斯濾波是將輸入數組的每一個像素點與高斯內核卷積將卷積和當作輸出像素值。

      http://www.rzrgm.cn/http://www.rzrgm.cn/_images/Smoothing_Tutorial_theory_gaussian_0.jpg

      參考一維高斯函數,我們可以看見,他是個中間大兩邊小的函數。

      所以高斯濾波器其加權數是中間大,四周小的。

      其二維高斯函數為:

          G_{0}(x, y) = A  e^{ \dfrac{ -(x - \mu_{x})^{2} }{ 2\sigma^{2}_{x} } +  \dfrac{ -(y - \mu_{y})^{2} }{ 2\sigma^{2}_{y} } } 

      其中 \mu 為均值 (峰值對應位置),\sigma 代表標準差 (變量x 和 變量y 各有一個均值,也各有一個標準差)。

       

      中值平滑

      使用medianBlur執行中值平滑:

      #include "opencv2/core/core.hpp"
      
      #include "opencv2/highgui/highgui.hpp"
      
      #include "opencv2/imgproc/imgproc.hpp"
      
      #include <stdio.h>
      
      using namespace std;
      using namespace cv;

      int main( int argc, char** argv ){ Mat image; image = imread( argv[1]); if( argc != 2 || !image.data ){ printf("沒有圖片\n"); return -1; } namedWindow( "平滑處理-輸入" ); namedWindow( "平滑處理-輸出" ); imshow( "平滑處理-輸入", image ); Mat out; medianBlur( image, out, 3); imshow( "平滑處理-輸出", out ); waitKey( 0 ); }

      medianBlur函數API資料:

      使用中值濾波器進行模糊操作

      C++: void medianBlur(InputArray src, OutputArray dst, int ksize)
      Parameters:
      • src – 支持1、3、4通道圖片輸入,當ksize為3或者5時,圖片的深度只能是CV_8U,,CV_16U,或者 CV_32F,對于其他大孔徑尺寸只支持深度為CV_8U。
      • dst – 輸出圖片,和輸入圖片相同大小和深度。
      • ksize – 線性直徑大小,只能是一個大于1的奇數,例如:3, 5, 7 ...

      中值濾波將圖像的每個像素用鄰域 (以當前像素為中心的正方形區域)像素的中值代替 。 

       

      雙邊平滑

      使用bilateralFilter執行雙邊平滑:

      #include "opencv2/core/core.hpp"
      
      #include "opencv2/highgui/highgui.hpp"
      
      #include "opencv2/imgproc/imgproc.hpp"
      
      #include <stdio.h>
      
      using namespace std;
      using namespace cv;

      int main( int argc, char** argv ){ Mat image; image = imread( argv[1]); if( argc != 2 || !image.data ){ printf("沒有圖片\n"); return -1; } namedWindow( "平滑處理-輸入" ); namedWindow( "平滑處理-輸出" ); imshow( "平滑處理-輸入", image ); Mat out; bilateralFilter ( image, out, 3, 3*2, 3/2 ); imshow( "平滑處理-輸出", out ); waitKey( 0 ); }

      bilateralFilter的API資料:

      對一個圖片應用雙邊濾波器。

      C++: void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, intborderType=BORDER_DEFAULT )
      Parameters:
      • src – 源必須是8位或者浮點數,1或者3通道圖片。
      • dst – 輸出圖片,和輸入圖片相同大小和深度。
      • d – 在濾波過程中使用的各像素鄰域直徑,如果這是一個非整數,則這個值由sigmaSpace決定。
      • sigmaColor – 顏色空間的標準方差。數值越大,意味著越遠的的顏色會被混進鄰域內,從而使更大的顏色段獲得相同的顏色。
      • sigmaSpace – 坐標空間的標注方差。 數值越大,以為著越遠的像素會相互影響,從而使更大的區域足夠相似的顏色獲取相同的顏色。當d>0,d指定了鄰域大小且與sigmaSpace無關。否則,d正比于sigmaSpace

      原理可參考:

      http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html

      目前我們了解的濾波器都是為了平滑圖像, 問題是有些時候這些濾波器不僅僅削弱了噪聲, 連帶著把邊緣也給磨掉了。 為避免這樣的情形 (至少在一定程度上 ), 我們可以使用雙邊濾波。 

      類似于高斯濾波器,雙邊濾波器也給每一個鄰域像素分配一個加權系數。 這些加權系數包含兩個部分, 第一部分加權方式與高斯濾波一樣,第二部分的權重則取決于該鄰域像素與當前像素的灰度差值。

       

      被山寨的原文

      Smoothing Images . OpenCV.org

      Image Filtering API . OpenCV.org

      主站蜘蛛池模板: 日本边添边摸边做边爱喷水| 国产中文字幕一区二区| 久久精品女人的天堂av| 久久综合激情网| 亚洲精品成人片在线观看精品字幕| 果冻传媒mv免费播放在线观看| 三级黄色片一区二区三区| 日日橹狠狠爱欧美视频| 亚洲大尺度无码专区尤物| 亚洲av天堂天天天堂色| 日韩欧美一中文字暮专区| 国内自拍偷拍福利视频看看| 国产一区二区日韩在线| 澳门永久av免费网站| 美女人妻激情乱人伦| 亚欧乱色国产精品免费九库| 性欧美乱熟妇xxxx白浆| 精品av无码国产一区二区| 国产精品不卡一区二区视频| 忘忧草在线社区www中国中文| 亚洲精品成人福利网站 | 国产精品福利一区二区久久| 樱花草视频www日本韩国 | 亚洲欧美日韩综合久久| 成人亚洲狠狠一二三四区| 日韩一区二区三区女优丝袜 | 91青青草视频在线观看| 亚洲最大av资源站无码av网址| 亚洲精品国产av成人网| 激情五月开心婷婷深爱| 亚洲国产精品久久电影欧美 | 国产精品毛片大码女人| 亚洲天堂成人一区二区三区| 免费 黄 色 人成 视频 在 线| 色九月亚洲综合网| av无码久久久久不卡网站蜜桃 | 欧美和黑人xxxx猛交视频| 中文字幕午夜福利片午夜福利片97 | 思茅市| 国产精品 亚洲一区二区三区| 国产成人无码AV大片大片在线观看 |