OpenCV缝合器无法拼接未失真的图像

时间:2016-09-26 06:47:43

标签: c++ image-stitching opencv3.1 fisheye

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

0 个答案:

没有答案