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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++中g(shù)etline()、gets()等函數(shù)的用法詳解
這篇文章主要介紹了C++中g(shù)etline()、gets()等函數(shù)的用法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
C++中String類的常用接口函數(shù)總結(jié)
這篇文章主要介紹了C++中Stirng類的常用接口函數(shù),文中有詳細的代碼示例供大家參考,對我們學習C++有一定的幫助,感興趣的同學可以跟著小編一起來學習2023-06-06

