c++ opencv保存加了高斯噪声的图片
时间: 2023-09-10 19:02:13 浏览: 85
使用OpenCV保存经过高斯噪声处理的图片非常简单。首先,我们需要加载原始图片并进行高斯噪声处理,这可以通过使用OpenCV的函数来完成。接下来,我们可以将处理后的图片保存到指定的路径。
以下是一种实现方法:
```python
import cv2
import numpy as np
# 加载原始图片
image = cv2.imread('原始图片路径.jpg')
# 添加高斯噪声处理
mean = 0 # 噪声均值
sigma = 10 # 噪声标准差
noise = np.random.normal(mean, sigma, image.shape).astype(np.uint8)
noisy_image = cv2.add(image, noise)
# 保存处理后的图片
cv2.imwrite('保存路径.jpg', noisy_image)
```
在上述代码中,我们首先使用`cv2.imread`函数加载原始图片。然后,我们通过调整`mean`和`sigma`的值来控制生成的高斯噪声的强度。接下来,我们使用`np.random.normal`函数生成均值为`mean`,标准差为`sigma`的高斯噪声,并使用`cv2.add`函数将噪声添加到原始图片上,得到处理后的图片。最后,使用`cv2.imwrite`函数将处理后的图片保存到指定路径。
请注意,在代码中需要替换"原始图片路径.jpg"和"保存路径.jpg"为实际的图片路径。另外,根据实际需要,可以调整`mean`和`sigma`的值来控制高斯噪声的强度。
相关问题
opencv c++给视频添加高斯噪声与椒盐噪声
添加高斯噪声可以使用cv::randn()函数来生成高斯分布的随机数,并将其加到图像像素上。具体实现代码如下:
```c++
cv::Mat addGaussianNoise(cv::Mat image, double mean, double stddev)
{
cv::Mat noise = cv::Mat(image.size(), CV_8UC1);
cv::randn(noise, mean, stddev);
cv::Mat result = image.clone();
result += noise;
return result;
}
```
其中,mean和stddev分别表示高斯分布的均值和标准差,可以根据需要进行调整。
添加椒盐噪声可以使用cv::randu()函数来生成随机数,并根据生成的随机数将像素值设为黑色或白色。具体实现代码如下:
```c++
cv::Mat addSaltAndPepperNoise(cv::Mat image, double noiseRatio)
{
cv::Mat noise = cv::Mat(image.size(), CV_8UC1);
cv::randu(noise, 0, 255);
cv::Mat result = image.clone();
for (int i = 0; i < image.rows; i++)
{
for (int j = 0; j < image.cols; j++)
{
double r = (double)cv::rand() / (RAND_MAX + 1.0);
if (r < noiseRatio / 2)
{
result.at<uchar>(i, j) = 0;
}
else if (r < noiseRatio)
{
result.at<uchar>(i, j) = 255;
}
}
}
return result;
}
```
其中,noiseRatio表示噪声比例,即椒盐噪声占图像像素的比例,可以根据需要进行调整。
opencv c++怎么生成并添加高斯噪声
要在OpenCV中生成并添加高斯噪声,可以使用以下步骤:
1. 读取图像:使用`imread()`函数读取要添加噪声的图像。
2. 创建噪声图像:创建一个与原始图像大小相同的噪声图像,可以使用`Mat`类的构造函数来创建一个空的图像。
3. 生成高斯噪声:使用`randn()`函数生成均值为0,标准差为`sigma`的高斯噪声。可以通过乘以标准差并加上均值来获得所需的高斯噪声。
```c++
Mat noise = Mat(image.size(), image.type());
randn(noise, Scalar(0), Scalar(sigma));
```
4. 添加噪声:将生成的高斯噪声添加到原始图像中,可以使用`add()`函数将噪声添加到原始图像中。
```c++
Mat noisy_image;
add(image, noise, noisy_image);
```
5. 显示结果:使用`imshow()`函数显示添加了噪声的图像,使用`waitKey()`函数等待用户按下键盘上的任意键。
```c++
imshow("Original Image", image);
imshow("Noisy Image", noisy_image);
waitKey(0);
```
完整的示例代码如下:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("lena.jpg", IMREAD_GRAYSCALE);
double sigma = 20;
Mat noise = Mat(image.size(), image.type());
randn(noise, Scalar(0), Scalar(sigma));
Mat noisy_image;
add(image, noise, noisy_image);
imshow("Original Image", image);
imshow("Noisy Image", noisy_image);
waitKey(0);
return 0;
}
```
在上面的示例中,我们生成了一个标准差为20的高斯噪声,并将其添加到原始图像中,最后将添加了噪声的图像显示在屏幕上。