OpenCV实现高斯噪声
本文实例为大家分享了OpenCV实现高斯噪声的具体代码,供大家参考,具体内容如下
文章图片
OpenCV 中提供了fill()函数可以产生均匀分布或者高斯分布(正态分布)的随机数,我们可以利用该函数产生符合高斯分布的随机数,之后在图像中加入这些随机数即可
void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange = false );
- mat:用于存放随机数的矩阵,目前只支持低于5通道的矩阵。
- distType:随机数分布形式选择标志,目前生成的随机数支持均匀分布(RNG::UNIFORM,0)和高斯分布(RNG::NORMAL,1)。
- a:确定分布规律的参数。当选择均匀分布时,该参数表示均匀分布的最小下限;当选择高斯分布时,该参数表示高斯分布的均值。
- b:确定分布规律的参数。当选择均匀分布时,该参数表示均匀分布的最大上限;当选择高斯分布时,该参数表示高斯分布的标准差。
- saturateRange:预饱和标志,仅用于均匀分布。
在图像中添加高斯噪声大致分为以下4个步骤:
Step1:首先需要创建一个与图像尺寸、数据类型以及通道数相同的Mat类变量.
Step2:通过调用fill()函数在Mat类变量中产生符合高斯分布的随机数。
Step3:将原图像和含有高斯分布的随机数矩阵相加。
Step4:得到添加高斯噪声之后的图像。
简单示例
//// Created by smallflyfly on 2021/6/11.// #include "opencv2/opencv.hpp"#include "opencv2/highgui.hpp" #includeusing 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; }
【OpenCV实现高斯噪声】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解
- Node.js中readline模块实现终端输入
- java中如何实现重建二叉树
- 人脸识别|【人脸识别系列】| 实现自动化妆
- paddle|动手从头实现LSTM