【1】使用.bat文件批量更名
在图片所在的文件夹【新建txt文件】,然后【输入如下代码】:
@echo off
set a=0
setlocal EnableDelayedExpansion
for %%n in (*.bmp) do (
set /A a+=1
ren "%%n" "!a!.bmp"
)
其中:
1.a=0表示将要给文件命名的序号的初始值(当然这里命名的其实是从1开始的,相信各位一看就知道)。
2.(*.bmp)对应你原本图片的格式,如是jpg则换成(*.jpg)
3."!a!.bmp"是你将要改成的名字,这里输出的结果是 1.bmp 。也可以改成"test!a!.bmp",那么结果就是 test1.bmp
再【保存】,然后【改为bat格式】,最后【双击】运行。
【2】使用cmd获取名称列表
先使用cd进入图片坐在目录,然后输入:
dir/b>name.txt
当然,name.txt可以改成你自己想要的名字。name.txt文件的内容如下:
一般会把最后两个文件名称删除。
【3】进行批量读取、处理、保存。
我是在visual studio中利用OpenCV处理的,废话不多说,直接展示一个简单的例子。
#include "stdafx.h"
#include<opencv2/opencv.hpp>
#include<iostream>
#include<fstream>
using namespace std;
using namespace cv;
Mat process(Mat srcImage);
int main()
{
Mat srcImage, result;
ifstream file("C:/Users/vector_Lu/source/repos/bmp_to_jpg/bmp_to_jpg/name.txt");
int img_num = 10;
for (int i = 0; i < img_num; i++)
{
char txt_cont[200];
file.getline(txt_cont, 200);
char img_file[200], save_file[200];
sprintf_s(img_file, "C:/Users/vector_Lu/source/repos/bmp_to_jpg/bmp_to_jpg/%s", txt_cont);
sprintf_s(save_file, "C:/Users/vector_Lu/source/repos/bmp_to_jpg/bmp_to_jpg/%d.jpg", i+1);
srcImage = imread(img_file);
//namedWindow("src", WINDOW_NORMAL);
//imshow("src", srcImage);
result = process(srcImage);
imwrite(save_file, result);
}
//waitKey(0);
return 0;
}
/****************
把bmp图片转化成jpg图片
****************/
Mat process(Mat srcImage)
{
Mat tempImage, outImage;
cout << srcImage.type() << " " << srcImage.size() << srcImage.channels() << endl;
cvtColor(srcImage, tempImage, COLOR_BGR2GRAY);
cout << tempImage.type() << " " << tempImage.size() << tempImage.channels() << endl;
cvtColor(tempImage, tempImage, COLOR_GRAY2BGR);
cout << tempImage.type() << " " << tempImage.size() << tempImage.channels() << endl;
int row_num = srcImage.rows;
int col_num = srcImage.cols;
int center_x = row_num / 2;
int center_y = col_num / 2;
cout << center_x << " " << center_y << endl;
outImage = tempImage(Rect(center_y - 1024, center_x - 600, 2048, 1200));
cout << outImage.type() << " " << outImage.size() << outImage.channels() << endl;
return outImage;
}
这里实现的功能就是批量的把bmp图片转化成一定尺寸的jpg图片。(之前在MATLAB上直接批量的读取然后保存的时候更改文件格式,发现保存的jpg图片只有单通道,这显然是不对的。因此想打用OpenCV中的【cvtcolor】函数来实现,实际证明是可行的)
上面的代码很多是写的时候用来辅助(debug)用的,读者可以自行删除。运行后目录下的文件如下: