700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > opencv以图片名称为索引顺序读取多张图片

opencv以图片名称为索引顺序读取多张图片

时间:2018-12-06 05:15:29

相关推荐

opencv以图片名称为索引顺序读取多张图片

自己的项目中需要按照顺序读取多张图片,论坛上已有的方式大多是通过图像名称固定编号,按照编号循序读取,这种方法虽然简单有效,可局限性在于读取的图片名必须是连续有限的,比如下面的例子中只能读取该文件夹下图片名称为[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);

}

}

此时就能利用这两个编号索引按序读取图片了。

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