Я пытаюсь сшить панораму, используя камеру мобильного телефона с прикрепляемым широкоугольным объективом 170 градусов. Полученное фото искажено (рыбий глаз). Я так понимаю, что для сшивания этих фотографий используется Stitcher::stitch(InputArrayOfArrays images, OutputArray pano)
сначала они должны быть неискаженными.
Во-первых, я сделал undistort(InputArray src, OutputArray dst, InputArray cameraMatrix, InputArray distCoeffs, InputArray newCameraMatrix=noArray() )
и сохраните результаты в файлы jpg. Затем я прочитал изображения jpg, сшил их, чтобы они были панорамой, и это сработало хорошо.
Затем я присоединился к процессу в единый процесс. Поэтому я не сохранил неискаженное изображение, но сохранил их в cv::Mat
и использовать его в качестве ввода брошюровщика. Этот сбой с кодом ошибки ERR_NEED_MORE_IMGS.
У меня вопрос, почему это работает, если ввод брошюровщика (ImgArray
) происходит от imread
, но терпит неудачу, если вход поступает непосредственно от undistort
выход? Как заставить второй случай работать?
//Load photo source (distorted)
Mat imageDistorted, imageUndistorted;
vector<Mat> ImgArray;
for (int p=1; p<=6; p++){
imageDistorted = imread( "/file1.jpg" ); //read file2, file3, ...
if(imageDistorted.data){
undistort(imageDistorted, imageUndistorted, camVariables, distCoeffs);
ImgArray.push_back( imageUndistorted );
}
}
//Apply Stitching algorithm
Mat panoImg;
Stitcher stitcher = Stitcher::createDefault();
Stitcher::Status status = stitcher.stitch(ImgArray, panoImg);
Задача ещё не решена.
Других решений пока нет …