我正在尝试使用带有可附加的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);