批量处理图像

来源:互联网 发布:天刀人生至此知何似 编辑:程序博客网 时间:2024/06/01 20:09

在机器学习算法中,有时需要对图像进行resize等操作,如果一张一张图像操作,显然不现实。

下面介绍一下如何处理:

一、获取当前文件夹下的图像名称

比如当前文件夹中有几百上千幅图像,获取全部图像的名字就需要用到 批处理

步骤很简单:

1.新建一个txt文档

2.在文档中输入  DIR *.* /B >list.txt ,复制粘贴即可

3.更改txt文件的后缀名为.bat(更改后缀名后的文件图标是一大一小两个齿轮)

4.将bat文件放在当前文件夹下,然后双击该bat

5.生成文件 list.txt,该txt文件中记录了当前文件夹所有图像的名字,如图

其中list.txt中的内容如图:


二、resize图像尺寸

1、获取list.txt中的图像名称 

getline(finHardSam, ImgName)

2、resize即可

不多说,上代码

#include "stdafx.h"#include <opencv2/opencv.hpp>#include<fstream>using namespace cv;using namespace std;void main(){String path = "E:\\haar\\Pos\\";string ImgName; //图片名(绝对路径)ifstream finHardSam(path + "list.txt");//HardExample负样本的文件名列表int num = 411;for (int i = 0; i < num && getline(finHardSam, ImgName); i++){std::cout << "难样本--处理图像:" << ImgName << endl;ImgName = path + ImgName;//加上正样本的路径名Mat src = imread(ImgName);//读取图片Mat trainImage;resize(src, trainImage, Size(24, 48));//调整尺寸大小Size(w, h)imwrite("E:\\haar\\Posnom\\" + to_string(i) + ".jpg", trainImage);}}

补充:

1、在 一 中的批处理命令是获取当前文件夹中的图像名称的,如果获取当前文件中所有图像的路径,则需要将批处理命令改为

@echo off & setlocal EnableDelayedExpansionfor /f "delims=" %%i in ('"dir /a/s/b/on *.*"') do (set file=%%~fiset file=!file:/=/!echo !file! >>list.txt)

其余操作,相同。

2、今天又了解到一个名为 Editplus的软件(请原谅我孤陋寡闻),此软件功能强大,如果我们想在list文件中图像名称后面添加其他图像信息,可利用此软件:

用EditPlus打开该文件,search-->replace-->在'find what‘’(查找项)里输入"\n" (不包含引号)-->在replace(替换)里输入"  24*24\nimage/"(不包含引号),同时记得勾选regular expression(正则表达式)一项-->点击‘replace all’。

结果如图:


原创粉丝点击