OpenCV批量修改图片及批量命名

【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格式】,最后【双击】运行。

OpenCV批量修改图片及批量命名_第1张图片

【2】使用cmd获取名称列表

先使用cd进入图片坐在目录,然后输入:

dir/b>name.txt

OpenCV批量修改图片及批量命名_第2张图片

当然,name.txt可以改成你自己想要的名字。name.txt文件的内容如下:

OpenCV批量修改图片及批量命名_第3张图片

一般会把最后两个文件名称删除。

【3】进行批量读取、处理、保存。

我是在visual studio中利用OpenCV处理的,废话不多说,直接展示一个简单的例子。

#include "stdafx.h"
#include
#include
#include

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)用的,读者可以自行删除。运行后目录下的文件如下:

OpenCV批量修改图片及批量命名_第4张图片

你可能感兴趣的:(OpenCV批量修改图片及批量命名)