圖像處理之OpenCV - 縮放/旋轉/裁剪/加噪聲/高斯模糊


Github地址

@ 縮放

1 void cv::resize ( InputArray      src,
2                   OutputArray      dst,
3                   Size      dsize,
4                   double      fx = 0,
5                   double      fy = 0,
6                   int      interpolation = INTER_LINEAR 
7                 )     

 

@ 旋轉

1 Mat cv::getAffineTransform ( const Point2f src[],
2                              const Point2f dst[] 
3                            )     

根據上圖得到src和dst三個點的轉換坐標Point2f src[], Point2f dst[];

由getAffineTransform函數得到轉換矩陣M;

1 void cv::warpAffine ( InputArray src,
2                       OutputArray dst,
3                       InputArray M,
4                       Size dsize,
5                       int flags = INTER_LINEAR,
6                       int borderMode = BORDER_CONSTANT,
7                       const Scalar &borderValue = Scalar() 
8                      )     

由warpAffine根據上述得到的矩陣M進行稠密仿射轉換操作;

 

@ 裁剪

1 cv::Mat::Mat ( const Mat &m,
2                const Rect &roi 
3              )     

直接由Mat的構造函數即可得到 Mat m的局部圖像;

 

@ 加噪聲

@-@ 步驟

創建噪聲Mat: cv::Mat的構造函數;

生成隨機數種子:RNG的構造函數;

將隨機數填充到噪聲Mat中:RNG::fill()函數;

將圖像與噪聲矩陣相加即可:cv::add()函數;

@-@ 重點函數講解

1 void cv::RNG::fill ( InputOutputArray mat,
2                      int      distType,
3                      InputArray      a,
4                      InputArray      b,
5                      bool      saturateRange = false 
6                    )     

函數作用:對矩陣mat填充隨機數。

參數:

隨機數的產生方式有參數2來決定,如果為參數2的類型為RNG::UNIFORM,則表示產生均勻分布的隨機數,如果 為RNG::NORMAL則表示產生高斯分布的隨機數。

對應的參數3和參數4為上面兩種隨機數產生模型的參數。比如說如果隨機數產生模型為均勻分布,則參數a表示均勻分布的下限,參數b表示上限。如果隨機數產生模型為高斯模型,則參數a表示均值,參數b表示方差。

參數5只有當隨機數產生方式為均勻分布時才有效,表示的是是否產生的數據要布滿整個范圍。

備注:需要注意的是用來保存隨機數的矩陣mat可以是多維的,也可以是多通 道的,目前最多只能支持4個通道。

@-@ 核心code

1     cv::Mat img_output(img_input.size(), img_input.type());
2     cv::Mat noise(img_input.size(), img_input.type());  /**創建一個噪聲矩陣*/
3     cv::RNG rng(time(NULL));
4  //   rng.fill(noise, cv::RNG::UNIFORM, 0, 200);  /**均勻分布*/
5     rng.fill(noise, cv::RNG::NORMAL, 113, 9);  /**高斯分布*/
6     cv::add(img_input, noise, img_output);

 

 

@ 高斯濾波

具體操作:用一個模板(或稱卷積、掩模)掃描圖像中的每一個像素,用模板確定的鄰域內像素的加權平均灰度值去替代模板中心像素點的值。

1 void cv::GaussianBlur ( InputArray src,
2                         OutputArray dst,
3                         Size ksize,
4                         double sigmaX,
5                         double sigmaY = 0,
6                         int borderType = BORDER_DEFAULT 
7                       ) 

 

功能:對輸入的圖像src進行高斯濾波后用dst輸出;

參數:

ksize為高斯濾波器模板大小-

sigmaX和sigmaY分別為高斯濾波在橫向和豎向的濾波系數;(?未理解)

borderTyep為邊緣點插值類型;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM