简单的数据增强代码(C++与opencv)
生活随笔
收集整理的這篇文章主要介紹了
简单的数据增强代码(C++与opencv)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
包括了圖片批量平移、旋轉、以及像素變換
#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; }總結
以上是生活随笔為你收集整理的简单的数据增强代码(C++与opencv)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去日本机票多少钱啊?
- 下一篇: 分类如果有三级目录,提问时第三级目录没法