OpenCV实现高斯噪声

本文实例为大家分享了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。第二个参数是选择随机数分布形式的标志,该函数目前只支持两种分布形式,分别是均匀分布(RNG::UNIFORM,简记0)和高斯分布(RNG::NORMAL,简记1)。函数的第三个和第四个参数为确定随机数分布规律的参数,第三个参数在均匀分布时表示均匀分布的最小下限,在高斯分布时表示高斯分布的均值;第四个参数在均匀分布时表示均匀分布的最大上限,在高斯分布时表示高斯分布的标准差。最后一个参数是预饱和标志,仅用于均匀分布,我们使用其默认式即可。

在图像中添加高斯噪声大致分为以下4个步骤:

Step1:首先需要创建一个与图像尺寸、数据类型以及通道数相同的Mat类变量.
Step2:通过调用fill()函数在Mat类变量中产生符合高斯分布的随机数。
Step3:将原图像和含有高斯分布的随机数矩阵相加。
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;
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

猜你在找的OpenCV实现高斯噪声相关文章

这篇文章主要为大家详细介绍了OpenCV实现高斯噪声,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
反调试技术,恶意代码会用它识别自身是否被调试,或者让调试器失效,给反病毒工程师们制造麻烦,拉长提取特征码的时间线,本章将具体总结常见的反调试基础的实现原理以及如
当我们使用动态补丁的时候,那么内存中同样不存在校验效果,也就无法抵御对方动态修改机器码了,为了防止解密者直接对内存打补丁,我们需要在硬盘校验的基础上,增加内存校
这篇文章主要为大家详细介绍了OpenCV实现可分离滤波,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了OpenCV实现图像腐蚀,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了OpenCV实现图像连通域,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了OpenCV实现直线检测并消除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文主要介绍了Qt实现网络聊天室,实现一个在线聊天室, 使用tcp对客户端和服务器端进行通讯。具有一定的参考价值,具有一定的参考价值,
这篇文章主要为大家详细介绍了OpenCV实现图像距离变换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了OpenCV实现图像膨胀,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
信号槽是 Qt 框架引以为豪的机制之一。本文主要介绍了Qt信号槽机制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了OpenCV实现直线拟合,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下