我想在我的程序中加载大量图像,稍后将它们缝合在一起。我正在使用命令行来提及图像地址。它的工作原理,如果我事先知道图像的数量我会在输入,但它并不适用于输入图像的变量数:如何使用命令行参数在opencv中读取多个图像文件?
if (argc < 3)
{
cerr<<"Usage:" << argv[0] << "SOURCE DESTINATION" << endl;
return 1;
}
for (int i = 0;i <argc;i++)
{
Mat img[i] = imread(argv[i+1], 0);
imshow("image", img[i]);
}
是否有其他方法来获得在这种情况下输入。我需要处理20到25张图像。我可以使用一些文件,存储地址并阅读它。我认为这是可能的,但它是如何工作的?
编辑:
一些修改后,我的程序现在这个样子:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/calib3d/calib3d.hpp"
#include <math.h>
#include <cmath>
#define PI 3.14159
#define max_img 25
using namespace cv;
using namespace std;
//main function
int main(int argc, char** argv)
{const int MAX_NUM_OF_IMG = 1024;
cv::Mat img[MAX_NUM_OF_IMG];
for(int i=1;i<argc;i++)
{
std::cout << i << ": " << argv[i] << std::endl;
img[i-1] = imread(argv[i],0);
std::cout << "Finished reading images1" << std::endl;
imshow("image",img[i]);
//start stitching operations
}std::cout << "Finished reading images2" << std::endl;
cv::waitKey();
return 0;
}
我给在命令行下面:
./img_many camera3/imageb-032.jpgcamera3/imageb-033.jpgcamera3/imageb-034.jpgcamera3/imageb-035.jpgcamera3/imageb-036.jpgcamera3/imageb-037.jpgcamera3/imageb-038.jpgcamera3/imageb-039.jpg
我得到的输出是
1: camera3/imageb-032.jpgcamera3/imageb-033.jpgcamera3/imageb-034.jpgcamera3/imageb-035.jpgcamera3/imageb-036.jpgcamera3/imageb-037.jpgcamera3/imageb-038.jpgcamera3/imageb-039.jpg
Finished reading images1
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /build/buildd/opencv-2.3.1/modules/core/src/array.cpp, line 2482
terminate called after throwing an instance of 'cv::Exception'
what(): /build/buildd/opencv-2.3.1/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat
Aborted (core dumped)
是否可以从命令行读取多个图像,并将它们作为参数?它为什么会崩溃?
你试过imshow(“image”,imread(argv [i + 1],0)); ? – Alexis
如果将图像拼接在一起,您可能会发现它有帮助。不完整,而是一个开始。 http://stackoverflow.com/questions/13893464/in-opencv-how-do-i-copy-and-scale-a-greyscale-image-into-another-colour-image – Emile