所谓的椒盐早点便是指随机的将部分像素设置为白色或者黑色。在传输过程中,如何图像的部分像素丢失,该噪点便会出现。
#include <iostream>
#include <string>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
using namespace cv;
// 读入图片
Mat readImage(String imgName);
// 显示图片
void showImage(String windowName, Mat ima);
// 椒盐函数
void salt(cv::Mat &image, int n);
// 保存图片
void saveImage(String imageName, Mat ima);
void main() {
String imgName = "381066140_1536_864.jpg";
// 打开图像
Mat img = readImage(imgName);
// 设置椒盐增加噪点
salt(img, 40000);
showImage("Salt", img);
// 保存图片
saveImage("salt.jpg", img);
}
// 椒盐函数,设置为白色噪点
void salt(cv::Mat &image, int n) {
for (int k = 0; k < n; k++) {
// 生成行列的随机数
int iCol = rand() % image.cols;
int jRow = rand() % image.rows;
// 判断是否是灰度图
if (1 == image.channels()) {
image.at<uchar>(jRow, iCol) = 255;
}
// 判断是否是彩色图像
else if (3 == image.channels()) {
image.at<cv::Vec3b>(jRow, iCol)[0] = 255;
image.at<cv::Vec3b>(jRow, iCol)[1] = 255;
image.at<cv::Vec3b>(jRow, iCol)[2] = 255;
}
}
}
// 显示图片
void showImage(String windowName ,Mat ima) {
imshow(windowName, ima);
waitKey(0);
}
// 读入图片
Mat readImage(String imgName) {
Mat ima = imread(imgName);
cvNamedWindow("Charater2");
imshow("C2", ima);
waitKey(0);
return ima;
}
// 保存图片
void saveImage(String imageName, Mat ima) {
imwrite(imageName, ima);
}
运行结果如下
原图
加入椒盐噪点后的图像
-
-