增加拖动条的椒盐噪声生成器源码

#椒盐噪声生成器

//=====================这个函数作用是对输入图像输出椒盐噪声=====================
//输入src源图像,输入格式图像名+图像格式,要求图像和程序处于相同文件夹
//调整椒盐噪声参数,输入s进行保存,输入q退出;
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;

void SrcImgRead();
void DstImgWrite();
void AddSaltPepperNoise(int,void*);
Mat addSaltNoise(const Mat srcImage, int n);

string srcName;
Mat srctImg,dstImg;
string dstImgName;
int n = 0;//椒盐噪声参数
char key;//操作识别,输入q退出,输入s保存

int main()
{
	SrcImgRead();
	if (!testImg.data) {
		cout << "读取图片失败,请检查文件路径或文件名" << endl;
		getchar();
		return false;
	}
	namedWindow("输入图像");
	imshow("输入图像", testImg);
	namedWindow("输出图像");
	dstImg = testImg;
	imshow("输出图像", dstImg);
	createTrackbar("n*100", "输出图像", &n, 100, AddSaltPepperNoise);
	
	while (waitKey(1) != 'q') {
		if (waitKey(1) == 's') {
			dstImgName = to_string(n*100);
			dstImgName.append(".jpg");
			imwrite(dstImgName,dstImg);
		}
	}
	return 0;
}

/*图像输入*/
void SrcImgRead() {
	cout << "请输入文件名" << endl;
	getline(cin, srcName);
	testImg = imread(srcName);
}
void AddSaltPepperNoise(int,void*) {
	dstImg = addSaltNoise(testImg, 500 * n);
	imshow("输出图像", dstImg);
}

Mat addSaltNoise(const Mat srcImage, int n)
{
	Mat dstImage = srcImage.clone();
	for (int k = 0; k < n; k++)
	{
		int i = rand() % dstImage.rows;//??t
		int j = rand() % dstImage.cols;
		if (dstImage.channels() == 1)
		{
			dstImage.at<uchar>(i, j) = 255;		//盐噪声
		}
		else
		{
			dstImage.at<Vec3b>(i, j)[0] = 255;
			dstImage.at<Vec3b>(i, j)[1] = 255;
			dstImage.at<Vec3b>(i, j)[2] = 255;
		}
	}
	for (int k = 0; k < n; k++)
	{
		int i = rand() % dstImage.rows;
		int j = rand() % dstImage.cols;
		if (dstImage.channels() == 1)
		{
			dstImage.at<uchar>(i, j) = 0;		//椒噪声
		}
		else
		{
			dstImage.at<Vec3b>(i, j)[0] = 0;
			dstImage.at<Vec3b>(i, j)[1] = 0;
			dstImage.at<Vec3b>(i, j)[2] = 0;
		}
	}
	return dstImage;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值