我想在我的程序中加載大量圖像,稍後將它們縫合在一起。我正在使用命令行來提及圖像地址。它的工作原理,如果我事先知道圖像的數量我會在輸入,但它並不適用於輸入圖像的變量數:如何使用命令行參數在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