OpenCV實現(xiàn)高斯噪聲
本文實例為大家分享了OpenCV實現(xiàn)高斯噪聲的具體代碼,供大家參考,具體內(nèi)容如下
OpenCV 中提供了fill()函數(shù)可以產(chǎn)生均勻分布或者高斯分布(正態(tài)分布)的隨機數(shù),我們可以利用該函數(shù)產(chǎn)生符合高斯分布的隨機數(shù),之后在圖像中加入這些隨機數(shù)即可
void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange = false );
- mat:用于存放隨機數(shù)的矩陣,目前只支持低于5通道的矩陣。
- distType:隨機數(shù)分布形式選擇標志,目前生成的隨機數(shù)支持均勻分布(RNG::UNIFORM,0)和高斯分布(RNG::NORMAL,1)。
- a:確定分布規(guī)律的參數(shù)。當選擇均勻分布時,該參數(shù)表示均勻分布的最小下限;當選擇高斯分布時,該參數(shù)表示高斯分布的均值。
- b:確定分布規(guī)律的參數(shù)。當選擇均勻分布時,該參數(shù)表示均勻分布的最大上限;當選擇高斯分布時,該參數(shù)表示高斯分布的標準差。
- saturateRange:預飽和標志,僅用于均勻分布。
該函數(shù)用于生成指定分布形式的隨機數(shù)填充矩陣,可以生成符合均勻分布的隨機數(shù)和符合高斯分布隨機數(shù)。函數(shù)的第一個參數(shù)輸入用于存儲生成隨機數(shù)的矩陣,但是矩陣的通道數(shù)必須小于等于4。第二個參數(shù)是選擇隨機數(shù)分布形式的標志,該函數(shù)目前只支持兩種分布形式,分別是均勻分布(RNG::UNIFORM,簡記0)和高斯分布(RNG::NORMAL,簡記1)。函數(shù)的第三個和第四個參數(shù)為確定隨機數(shù)分布規(guī)律的參數(shù),第三個參數(shù)在均勻分布時表示均勻分布的最小下限,在高斯分布時表示高斯分布的均值;第四個參數(shù)在均勻分布時表示均勻分布的最大上限,在高斯分布時表示高斯分布的標準差。最后一個參數(shù)是預飽和標志,僅用于均勻分布,我們使用其默認式即可。
在圖像中添加高斯噪聲大致分為以下4個步驟:
Step1:首先需要創(chuàng)建一個與圖像尺寸、數(shù)據(jù)類型以及通道數(shù)相同的Mat類變量.
Step2:通過調(diào)用fill()函數(shù)在Mat類變量中產(chǎn)生符合高斯分布的隨機數(shù)。
Step3:將原圖像和含有高斯分布的隨機數(shù)矩陣相加。
Step4:得到添加高斯噪聲之后的圖像。
簡單示例
// // Created by smallflyfly on 2021/6/11. // #include "opencv2/opencv.hpp" #include "opencv2/highgui.hpp" #include <iostream> using namespace std; using namespace cv; int main() { Mat im = imread("test.jpg"); resize(im, im, Size(0, 0), 0.5, 0.5); Mat gray; cvtColor(im, gray, CV_BGR2GRAY); Mat rgbNoise = Mat::zeros(im.rows, im.cols, im.type()); Mat grayNoise = Mat::zeros(gray.rows, gray.cols, gray.type()); RNG rng; rng.fill(rgbNoise, RNG::NORMAL, 10, 20); rng.fill(grayNoise, RNG::NORMAL, 10, 20); imshow("three channels noise", rgbNoise); imshow("one channels noise", grayNoise); im = im + rgbNoise; gray = gray +grayNoise; imshow("add noise rgb", im); imshow("add noise gray", gray); waitKey(0); destroyAllWindows(); return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
全局靜態(tài)存儲區(qū)、堆區(qū)和棧區(qū)深入剖析
在C++中,內(nèi)存可分為系統(tǒng)數(shù)據(jù)區(qū),自由存儲區(qū),文本區(qū),const數(shù)據(jù)區(qū),全局靜態(tài)區(qū),堆區(qū)和棧區(qū)2012-11-11C++ opencv ffmpeg圖片序列化實現(xiàn)代碼解析
這篇文章主要介紹了C++ opencv ffmpeg圖片序列化實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08