OpenCV stitcher не может сшить неискаженные изображения

Я пытаюсь сшить панораму, используя камеру мобильного телефона с прикрепляемым широкоугольным объективом 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);

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]