抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#pragma once
#include<iostream>
#include<opencv2/opencv.hpp>
#include <random> //随机数头文件


using namespace cv;
using namespace std;

void Salt(Mat image, int n); //n:加入噪声点数#pragma once
void Salt(Mat image, int n)
{
//随机数生成器
default_random_engine generater;
uniform_int_distribution<int>randomR(0, image.rows - 1);
uniform_int_distribution<int>randomC(0, image.cols - 1);

int i, j;
for (int k = 0; k < n; k++)
{
i = randomC(generater);
j = randomR(generater);
if (image.channels() == 1)
{
image.at<uchar>(j, i) = 255;
}
else if (image.channels() == 3)
{
image.at<Vec3b>(j, i)[0] = 255;
/*Vec:表示向量(Vector),是 OpenCV 中用于存储多通道数据的模板类。
3:表示向量有3 个元素(对应图像的 3 个通道,例如 BGR 彩色图像的蓝、绿、红通道)。
b:表示数据类型为uchar(无符号字符,即 unsigned char),取值范围是 0~255。*/
image.at<Vec3b>(j, i)[1] = 255;
image.at<Vec3b>(j, i)[2] = 255;
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
#include<opencv2/opencv.hpp>
#include "Salt.h"

using namespace cv;
using namespace std;

int main()
{

Mat image1 = imread("lena.png"); //读取图像;
if (image1.empty())
{
cout << "读取错误" << endl;
return -1;
}
imshow("image1", image1); //显示原图像;

Salt(image1, 5000); //加入5000个噪声点
imshow("image2", image1); //显示噪声图像;

waitKey(0); //暂停,保持图像显示,等待按键结束
return 0;
}

评论