2

我正在尝试使用带有可连接 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);
4

0 回答 0