自己的项目中需要按照顺序读取多张图片,论坛上已有的方式大多是通过图像名称固定编号,按照编号循序读取,这种方法虽然简单有效,可局限性在于读取的图片名必须是连续有限的,比如下面的例子中只能读取该文件夹下图片名称为[Image_0到Image_9]的图片。
int n = 0;
string image_name;
vector<Mat>A2;
while (n <= 9)
{
stringstream ss;//int转换string
string str;
ss << n;
ss >> str;
image_name = ""E:\\Image\\test\\Image_*.bmp";
//cout << image_name << endl;
Mat temp1 = imread(image_name, IMREAD_GRAYSCALE);
if (temp1.data == 0)
{
cout << "没有图片" << endl;
exit(0);
}
A2.push_back(src);
n++;
}
还有下面一种方式时按图像格式读取图片,不需要图像之间前后顺序,不在我们的讨论范围。
下面介绍一下自己调试出来的顺序读取方法,借鉴python中按图片名称读取图片字符串的格式,字符串可以分成几位,比如“A_B.jpg”字符串长度为7,也就是七位,在此字符串中的A、B若是变量,那么我们就可读取有格式的图片名称了。例如“1_5.jpg”,在图片名称中有两个控制循序的变量作为图片的索引,此时在opencv的读图方式没啥好方法(本人可能没看到有高级方法),下面就介绍下名称中有两个编号索引的图片读取方法。
for (int a = 1; a < 10; a++)
{
for (size_t b = 0; b < 20; b++)
{//b可以设置成最大范围内的,读取最后一个图片名称时如果小于该范围,跳出
string name = format(""E:\\Image\\test\\%d_%d.bmp", a, b);
Mat temp = imread(name);
if (temp.data == 0)
break;
else
storeImg.push_back(temp);
}
}
此时就能利用这两个编号索引按序读取图片了。