本文参考自: 原文地址
#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;
}
}