使用循环来声明Mat类

时间:2017-08-16 18:47:33

标签: c++ opencv computer-vision

相机将图像存储到FTP服务器,文件名模式为"文件夹" +" program_name" + index +"格式",其中index是数字从一到近十亿(0000000001到9999999999)。显示图像需要路径和文件名。需要在OpenCV上显示10个图像,因此我尝试使用函数ShowManyImages制作以下测试代码。

int main() {
int img_ini = 1;
std::string img_path = "../data/";
std::string img_name = "img";
std::string img_format = ".bmp";
std::string var;
var = img_path + img_name + std::to_string(img_ini) + img_format;

Mat img1 = imread(var);
Mat img2 = imread("../data/img2.bmp");
Mat img3 = imread("../data/img3.bmp");
Mat img4 = imread("../data/img4.bmp");
Mat img5 = imread("../data/img5.bmp");
Mat img6 = imread("../data/img6.bmp");
Mat img7 = imread("../data/img6.bmp");
Mat img8 = imread("../data/img6.bmp");
Mat img9 = imread("../data/img6.bmp");
Mat img10 = imread("../data/img6.bmp");
ShowManyImages("Image", 10, img1, img2, img3, img4, img5, img6, img7, img8, img9, img10);

return 0;
}

到目前为止,我可以显示图像1创建var变量。但是,这段代码很乱,我不想创建img1,img2, ..., img10

所以我尝试使用varMat img做类似的事情,创建一个类似For i = 1 To 10 Mat img + i = imread(img_path + img_name + std::to_string(img_ini + i) + img_format;)的循环。但是不能,因为Mat()不是imread()。

  • 有没有办法制作像所描述的for循环一样的东西?
  • 或者最好创建一个像以下一样的空函数:

    Mat img1 = imread(var(1));
    Mat img2 = imread(var(2));
    Mat img3 = imread(var(3));
    Mat img4 = imread(var(4));
    Mat img5 = imread(var(5));
    Mat img6 = imread(var(6));
    Mat img7 = imread(var(7));
    Mat img8 = imread(var(8));
    Mat img9 = imread(var(9));
    Mat img10 = imread(var(10));
    
  • 还是有其他/更好的方法吗?

1 个答案:

答案 0 :(得分:4)

尝试使用Mats的矢量。有几种方法可以加载它们并显示它们。

std::vector<cv::Mat> myMatArray;
for(int i = 0; i < numberOfPicturesToLoad; i++){
   std::string imgToLoad = img_path + img_name + std::to_string(i) + img_format;
   cv::Mat temp = imread(imageToLoad);
   myMatArray.push_back(temp);
}