用c++写一段高斯噪声方法,假设opencv已配置
时间: 2024-12-02 22:21:00 浏览: 27
在C++中,我们可以使用OpenCV库来生成高斯噪声。以下是一个简单的示例,展示如何创建一个高斯噪声图像:
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
cv::Mat addGaussianNoise(const cv::Mat& img, double sigma) {
cv::Mat noise;
// 创建与输入图像相同大小的随机噪声矩阵,范围从0到sigma*sqrt(2*pi)
cv::randn(noise, cv::Scalar(0), sigma * sqrt(2 * CV_PI));
// 将噪声添加到原始图像上
return img + noise;
}
int main() {
// 加载图像
cv::Mat src = cv::imread("input_image.jpg", cv::IMREAD_GRAYSCALE);
if (src.empty()) {
std::cout << "Error: Could not open or find the image." << std::endl;
return -1;
}
// 定义噪声标准差
double sigma = 5; // 可以调整这个值改变噪声程度
// 添加高斯噪声
cv::Mat noisy_img = addGaussianNoise(src, sigma);
// 显示原图和添加噪声后的图像
std::string window_name = "Original vs Noisy Image";
cv::imshow(window_name, std::vector<cv::Mat>{src, noisy_img});
cv::waitKey(0); // 等待用户按键
return 0;
}
```
在这个例子中,`addGaussianNoise`函数接收一个图像矩阵和一个标量表示噪声强度(标准差)。它首先创建一个同样大小的随机噪声矩阵,然后将噪声加到输入图像上。
运行此程序时,你需要确保已经安装了OpenCV,并且有一个名为"input_image.jpg"的灰度图像文件放在程序目录下。注意,高斯噪声的强度取决于`sigma`值,你可以根据需要调整它。
阅读全文