相机将图像存储到 FTP 服务器,文件名模式为“文件夹”+“程序名称”+索引+“格式”,其中索引是从一到近百亿(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 做一些类似于 var
所做的事情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 循环的东西?
还是创建一个 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 vector 。有几种加载和显示它们的方法。
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);
}
关于c++ - 使用循环声明 Mat 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45720893/