简单的拼接代码

时间:2015-10-20 08:22:55

标签: c++ opencv visual-c++ graphics mfc

这是我第一次使用OpenCV,这是为了进行简单的图像拼接......我尝试了以下简单的代码:

    Mat resImage;
    Mat image1 = imread(_T("D:\\Tempx\\Image1.bmp"), CV_LOAD_IMAGE_COLOR);
    Mat image2 = imread(_T("D:\\Tempx\\Image2.bmp"), CV_LOAD_IMAGE_COLOR);
    std::vector<cv::Mat> vImg;

    vImg.push_back(image1);
    vImg.push_back(image2);

    Stitcher stitcher = Stitcher::createDefault(TRUE);
    Stitcher::Status stat = stitcher.stitch(vImg, resImage); // <-- crash the program !!!
    if(cv::Stitcher::OK != stat)
        sError.Format(_T("Error while stitching the images."));

    std::vector<int> compression_params;
    compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
    compression_params.push_back(9);

    imwrite(_T("D:\\Tempx\\Image3.bmp"), resImage, compression_params);

但在线:

stitcher.stitch(vImg, resImage);
程序崩溃了:

enter image description here

可能是简单的事情,可能不是......你能看看并告诉我一个暗示/想法,什么?谢谢。

2 个答案:

答案 0 :(得分:1)

我猜你的照片有问题。确保它们被正确读取,例如,通过将其写入新文件。还要先测试另一对图像。如果所有这些都通过,那么可能由于某种原因它无法估计相机参数。

<强>更新 看起来功能提取器有一个问题,很难说只是你发布的跟踪出了什么问题。在代码中设置特征提取器,看看它是如何进行的:

Stitcher stitch = Stitcher::createDefault(FALSE);
stitch.setFeaturesFinder(new detail::OrbFeaturesFinder());

第一行与您的代码相同,在第二行我们只告诉拼接器要使用哪个功能提取器。

答案 1 :(得分:0)

拼接图片: enter image description here

enter image description here

,代码是:

#include <opencv2/opencv.hpp>
#include <opencv2/stitching.hpp>

    Mat image1 = imread(_T("D:/Tempx/Image1.bmp"), CV_LOAD_IMAGE_ANYCOLOR);
    Mat image2 = imread(_T("D:/Tempx/Image2.bmp"), CV_LOAD_IMAGE_ANYCOLOR);

    vImg.push_back(image1);
    vImg.push_back(image2);

    Mat resImage;
    Stitcher stitch = Stitcher::createDefault(FALSE);
    Stitcher::Status stat = stitch.stitch(vImg, resImage);
    if(Stitcher::OK != stat)
        MessageBox(_T("Error while stitching the images."));

    std::vector<int> compression_params;
    compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
    compression_params.push_back(9);

    imwrite(_T("D:/Tempx/Image3.bmp"), resImage, compression_params);