使用循环声明 Mat 类



相机将图像存储到FTP服务器,文件名模式为"文件夹"+"program_name"+索引+"格式",其中索引是从1到近100亿(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;
}

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

所以我尝试制作类似于对 Mat imgvar所做的操作,创建一个类似 For i=1 到 10Mat img + i = imread(img_path + img_name + std::to_string(img_ini + i) + img_format;).但是不能,因为垫子((没有那么不可读((。

  • 有没有办法制作类似于描述的 for 循环的东西?
  • 或者最好创建一个 void 函数,例如:

    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));
    
  • 还是有其他/更好的方法?

尝试使用 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);
}

最新更新