实现遍历文件夹下图片,并给图片加噪声和模糊(注意图像数组不要越界)还有insert函数的使用

这篇博客介绍了如何遍历指定文件夹中的所有图片,然后应用噪声添加和模糊处理技术。文章特别强调了在操作图像数组时避免越界的重要性,并提到了`insert`函数的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文参考自: 原文地址

#include<string>
#include<vector>
#include<iostream>
#include<cmath>
#include<stdio.h>
#include <stdlib.h>//用system函数
//#include<direct>

#include <opencv2/opencv.hpp>
#include<opencv\cv.h>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\contrib\contrib.hpp>
//#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;


void processing(char mode);





Mat addSaltNoise(const Mat srcImage, int n, int scale)
{
	Mat dstImage = srcImage.clone();
	for (int k = 0; k < n; k++)
	{
		//随机取值行列
		int i = rand() % dstImage.rows;
		int j = rand() % dstImage.cols;

		for (int r =0; r <scale; r++)
			for (int l =0; l <scale; l++)
			{
				dstImage.at<Vec3b>((i + r) % dstImage.rows, (j + l) % dstImage.cols)[0] = 200;
				dstImage.at<Vec3b>((i + r) % dstImage.rows, (j + l) % dstImage.cols)[1] = 200;
				dstImage.at<Vec3b>((i + r) % dstImage.rows, (j + l) % dstImage.cols)[2] = 200;
				//printf("%d  ", i + r);
				//printf("%d  ", j + l);
				//printf("%d\n", k);
				//int a = i + r;
				//int b = j + l;
				//int a = dstImage.at<Vec3b>((i + r) % dstImage.rows, (j + l) % dstImage.cols)[0];
				//printf("%d", dstImage.at<Vec3b>((i + r) % dstImage.rows, (j + l) % dstImage.cols)[0]);
			}
	}


	for (int k = 0; k < n; k++)
	{
		//随机取值行列
		int i = rand() % dstImage.rows;
		int j = rand() % dstImage.cols;
		for (int r = 0; r <scale; r++)
			for (int l = 0; l <scale; l++)
			{
				dstImage.at<Vec3b>((i + r) % dstImage.rows, (j + l) % dstImage.cols)[0] = 0;
				dstImage.at<Vec3b>((i + r) % dstImage.rows, (j + l) % dstImage.cols)[1] = 0;
				dstImage.at<Vec3b>((i + r) % dstImage.rows, (j + l) % dstImage.cols)[2] = 0;
			}
	}
	return dstImage;
}













void main()
{
	cout << "switch mode:";
	char mode;
	cin >> mode;
	processing(mode);

}

void processing(char mode)
{
	Directory dir;
	string a = "\\";
	string b = "/";
	string s1 = "_c1";
	string s2 = "_c2";
	string s3 = "_c3";

	string exten = "*";
	string exten1 = "*.jpg";
	bool addpath = false;
	string pathall = "F:/yangben/train_1017_zaosheng_yunxing/";





	switch (mode)
	{
	case 't':
	{
		string pathx = pathall + "trainall/";
		string pathxf = pathx + "train/";
		vector<string>foldernames = dir.GetListFolders(pathxf, exten, addpath);
		for (int i = 0; i < foldernames.size(); i++)
		{
			string foldername = foldernames[i];
			string pathxfi = pathxf + foldername;
			vector<string>filenames = dir.GetListFiles(pathxfi, exten1, addpath);
			for (int n = 0; n < filenames.size(); n++)
			{
				cout << "第" << n << "张图片"<<endl;
				const string imgname = filenames[n];
				string imgname1 = filenames[n];
				string imgname2 = filenames[n];
				Mat src = imread(pathxfi + "/" + imgname, 1);
				//imwrite(pathxf + b + foldernames[i], salt);
				//imshow("原图像", src);
				Mat salt = addSaltNoise(src, 50,5);
				//imshow("加入椒盐噪声的图像", dstImage);
				//存储图像
				Mat resizesalt;
				resize(salt, resizesalt, Size(90, 60), 0, 0, INTER_LINEAR);
				//imshow("resizesalt", resizesalt);
				//imwrite("resizesalt_pepper_Image10.jpg", resizesalt);

				Mat junresizesalt;
				blur(resizesalt, junresizesalt, Size(5, 5));
				//imshow("junresizesalt", junresizesalt);
				//imwrite("junresizesalt_pepper_Image10.jpg", junresizesalt);

				//Mat medresizesalt;
				//medianBlur(resizesalt, medresizesalt, 3);
				//imshow("medresizesalt", medresizesalt);
				//imwrite("medresizesalt_pepper_Image10.jpg", medresizesalt);
				string imgnameny = imgname1.insert(6, s1);
				string imgnamenj = imgname2.insert(6, s2);
				//string imgnamenm = imgname.insert(6, s3);
				//imwrite(pathxfi + "/" + imgnameny, src);
				if (imwrite(pathxfi + "/" + imgnameny, src))cout << imgnameny << endl;
				//imwrite(pathxfi + "/" + imgnamenj, junresizesalt);
				if (imwrite(pathxfi + "/" + imgnamenj, junresizesalt))cout << imgnamenj << endl;
				//imwrite(pathxfi + "/" + imgnamenm, medresizesalt);
				//if (imwrite(pathxfi + "/" + imgnamenm, medresizesalt))cout << imgnamenm << endl;


				string delpath = pathxfi + "/" + imgname;
				const char* delpathc = delpath.data();
				if (remove(delpathc) == 0)
				{
					cout << "删除成功:" << imgname << endl;
				}
				else
				{
					cout << "删除失败" << endl;
				}

				//DeleteFile()
				//system("del pathxfi");
				//system("del C:\\path\\dir\\filename.txt");
				//remove(imgname, imgname, pathxfi);
			}
		}
		break;
	}

	case 'v':
	{
		//遍历val
		string pathx = pathall + "trainall/";
		string pathxf = pathx + "val/";
		vector<string>foldernames = dir.GetListFolders(pathxf, exten, addpath);
		for (int i = 0; i < foldernames.size(); i++)
		{
			string foldername = foldernames[i];
			string pathxfi = pathxf + foldername;
			vector<string>filenames = dir.GetListFiles(pathxfi, exten1, addpath);
			for (int n = 0; n < filenames.size(); n++)
			{
				cout << "第" << n << "张图片"<<endl;
				const string imgname = filenames[n];
				string imgname1 = filenames[n];
				string imgname2 = filenames[n];
				Mat src = imread(pathxfi + "/" + imgname, 1);
				//imwrite(pathxf + b + foldernames[i], salt);
				//imshow("原图像", src);
				Mat salt = addSaltNoise(src, 50, 5);
				//imshow("加入椒盐噪声的图像", dstImage);
				//存储图像
				Mat resizesalt;
				resize(salt, resizesalt, Size(90, 60), 0, 0, INTER_LINEAR);
				//imshow("resizesalt", resizesalt);
				//imwrite("resizesalt_pepper_Image10.jpg", resizesalt);

				Mat junresizesalt;
				blur(resizesalt, junresizesalt, Size(5, 5));
				//imshow("junresizesalt", junresizesalt);
				//imwrite("junresizesalt_pepper_Image10.jpg", junresizesalt);

				//Mat medresizesalt;
				//medianBlur(resizesalt, medresizesalt, 3);
				//imshow("medresizesalt", medresizesalt);
				//imwrite("medresizesalt_pepper_Image10.jpg", medresizesalt);
				//保存原图
				//string imgnameny = imgname.insert(6, s1);
				string imgnamenj = imgname1.insert(6, s2);
				//string imgnamenm = imgname.insert(6, s3);
				//val不需要保存原图
				//imwrite(pathxfi + "/" + imgnameny, src);
				//if (imwrite(pathxfi + "/" + imgnameny, src))cout << imgnameny << endl;
				//imwrite(pathxfi + "/" + imgnamenj, junresizesalt);
				if (imwrite(pathxfi + "/" + imgnamenj, junresizesalt))cout << imgnamenj << endl;
				//imwrite(pathxfi + "/" + imgnamenm, medresizesalt);
				//if (imwrite(pathxfi + "/" + imgnamenm, medresizesalt))cout << imgnamenm << endl;




				string delpath = pathxfi + "/" + imgname;
				const char* delpathc = delpath.data();
				if (remove(delpathc) == 0)
				{
					cout << "删除成功:" << imgname << endl;
				}
				else
				{
					cout << "删除失败" << endl;
				}

				//DeleteFile()
				//system("del pathxfi");
				//system("del C:\\path\\dir\\filename.txt");
				//remove(imgname, imgname, pathxfi);
			}
		}
		break;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值