第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 文件夹下图片批处理(图片名不要求连续 批量旋转)

文件夹下图片批处理(图片名不要求连续 批量旋转)

时间:2021-10-07 09:33:23

相关推荐

文件夹下图片批处理(图片名不要求连续 批量旋转)

工程上为提高人脸识别后期的效率,多采用批处理快速矫正法而不是让图片迭代收敛到矫正状态。

人脸数据库多有成千上万张图片,若图片名不连续,则不能用格式化的路径传入法去批处理,而应采用文件的方法去批处理。

假设要将F:\face_recognition_database\testset路径下的图片批量旋转矫正,处理后的图像再以相同文件名批量存入F:\face_recognition_database\batch_testset文件夹。

1.准备工作:创建待批处理图片文件名的.txt文件

在运行窗口输入cmd打开命令提示符窗口,输入命令行cd F:\face_recognition_database\testset进入到指定目录,再输入F:按回车即可看到当前所在路径,再输入dir /b/s/p/w *.png>inputimage.txt生成包含testset文件夹下所有图片文件名的文本文件(inputimage为该文本文件的文件名),如下图。

2.opencv处理

可以看到.txt中各图片的具体路径中都是单个的反斜杠\,但C++中识别路径时只认双反斜杠\\,故在使用文件时要用string类的find和insert函数作相应处理。本例中以图片中心为旋转中心,所有图片顺时针旋转20度,大小缩放为原来的0.75倍。实际上做人脸矫正时需根据需要旋转不同的角度,设置不同的缩放因子,博主将在后期补上更完善的人脸矫正批处理。为了让读取过程在控制台可见,处理过程中额外添加了cout,读者若不需要可删除。全过程代码如下。

#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include<iostream>#include<fstream>#include<cstring>#define IMAGE_LIST_FILE "F:\\face_recognition_database\\testset\\inputimage.txt"using namespace cv;using namespace std;int main(){ifstream inFile;string src,dst;char str[] = "testset";string str2 = "batch_testset";Mat images,rotate_dst;Mat rot_mat(2, 3, CV_32FC1);inFile.open(IMAGE_LIST_FILE);//按行处理路径getline(inFile, src); cout << src << endl;while (inFile.good()){//C++路径名默认为'\\',故在每一个'\'后再插入一个'\'int t=src.find('\\', 0); while (t != string::npos){src=src.insert(t+1,1,'\\');cout << src << endl;t = src.find('\\', t+2);}images = imread(src);// 计算旋转中心点Point center = Point(images.cols / 2, images.rows / 2);//正值为逆时针旋转,负值为顺时针旋转double angle = -20;double scale = 0.75;//求得旋转矩阵rot_mat = getRotationMatrix2D(center, angle, scale);//旋转图片warpAffine(images, rotate_dst, rot_mat, images.size());//指定批处理后的保存路径int t2 = src.find(str, 0);dst=src.erase(t2, strlen(str));dst=dst.insert(t2, str2);imwrite(dst, rotate_dst);getline(inFile, src);}inFile.close();return 0;}

运行过程如下,可看到图片正在批处理

处理速度尚可,不到10s,可看到最终在F:\face_recognition_database\batch_testset下成功生成了旋转后的图片。

3.后续工作

因本例中旋转中心,旋转角度以及缩放因子都是固定的,故在人脸矫正的工程应用上尚不合理。如何自适应的进行人脸矫正博主将在后续更新。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。