包括了图片批量平移、旋转、以及像素变换
#include <opencv2/opencv.hpp>
#include "opencv2/features2d.hpp"
#include <vector>
#include <algorithm>
#include <iostream>
#include "windows.h"
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <fstream>
#include <fstream>
#include <iostream>
#include <filesystem>
#define WINDOW_NAME "【程序窗口】"
using namespace cv;using namespace std;
using std::ifstream;
using std::ofstream;
using std::cout;
using std::endl;
namespace fs = std::filesystem;Mat Translation(Mat& src, int x, int y)
{cv::Mat dst;cv::Size dst_sz = src.size();//定义平移矩阵cv::Mat t_mat = cv::Mat::zeros(2, 3, CV_32FC1);t_mat.at<float>(0, 0) = 1;t_mat.at<float>(0, 2) = x; //水平平移量t_mat.at<float>(1, 1) = 1;t_mat.at<float>(1, 2) = y; //竖直平移量//根据平移矩阵进行仿射变换cv::warpAffine(src, dst, t_mat, dst_sz);//显示平移效果//cv::imshow("image", src);//cv::imshow("result", dst);return dst;
}Mat Rotate(Mat& src, double angle)
{cv::Mat dst;cv::Size src_sz = src.size();cv::Size dst_sz(src_sz.height, src_sz.width);int len = max(src.cols, src.rows);//指定旋转中心cv::Point2f center(len / 2., len / 2.);//获取旋转矩阵(2x3矩阵)cv::Mat rot_mat = cv::getRotationMatrix2D(center, angle, 1.0);//根据旋转矩阵进行仿射变换cv::warpAffine(src, dst, rot_mat, dst_sz);return dst;
}Mat K_Pixels(Mat& src, double K)
{cv::Mat dst = K * src;return dst;
}fs::path p{ "D:/一些文件/python code/AI/使用数据集/增强后的label与文件名.txt" };
ofstream output{ p };
void Save_filenameLabel(cv::String savedfilename)
{output << savedfilename << " " << to_string(1) << endl;
}
int main()
{cv::String path = "C:/Users/LENOVO/Desktop/颜色转换/"; //待处理图片文件夹地址cv::String dest = "C:/Users/LENOVO/Desktop/增强后的图片/"; //处理后图片的保存地址cout << "获取地址成功" << endl;cv::String savedfilename;std::vector<cv::String> filenames;int len = path.length();cv::Mat srcImg;cv::glob(path, filenames); //opencv里面用来读取指定路径下文件名的一个很好用的函数 for (int i = 0; i < 13; i++) {srcImg = cv::imread(filenames[i]);resize(srcImg, srcImg, Size(128, 128));Mat dstImg;int Count = 1;//*************************对图片的处理部分***************************/向右边下方平移for (int j = 1; j < 21; j++){dstImg = Translation(srcImg, j * 2, j * 2);savedfilename = dest + to_string(Count) + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);Save_filenameLabel(to_string(Count) + filenames[i].substr(len));cout << "第" << j << "张完成" << endl;Count++;}向左上方平移for (int j = 1; j < 21; j++){dstImg = Translation(srcImg, -1 * j * 2, -1 * j * 2);savedfilename = dest + to_string(Count) + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);cout << "第" << j << "张完成" << endl;Save_filenameLabel(to_string(Count) + filenames[i].substr(len));Count++;}向右边上方平移for (int j = 1; j < 21; j++){dstImg = Translation(srcImg, j * 2, -1 * j * 2);savedfilename = dest + to_string(Count) + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);cout << "第" << j << "张完成" << endl;Save_filenameLabel(to_string(Count) + filenames[i].substr(len));Count++;}向左下方平移for (int j = 1; j < 21; j++){dstImg = Translation(srcImg, -1 * j * 2, j * 2);savedfilename = dest + to_string(Count) + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);cout << "第" << j << "张完成" << endl;Save_filenameLabel(to_string(Count) + filenames[i].substr(len));Count++;}//旋转for (int j = 1; j < 21; j++){dstImg = Rotate(srcImg, j * 8);savedfilename = dest + to_string(Count) + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);cout << "第" << j << "张完成" << endl;Save_filenameLabel(to_string(Count) + filenames[i].substr(len));Count++;}//像素变化for (int j = 1; j < 11; j++){dstImg = K_Pixels(srcImg, 0.5 + j * 0.1);savedfilename = dest + to_string(Count) + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);cout << "第" << j << "张完成" << endl;Save_filenameLabel(to_string(Count) + filenames[i].substr(len));Count++;}//resize(srcImg, dstImg, Size(128, 128));//********************************************************************/}output.close();waitKey(0);return 0;
}