这是我第一次使用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);
程序崩溃了:
可能是简单的事情,可能不是......你能看看并告诉我一个暗示/想法,什么?谢谢。
答案 0 :(得分:1)
我猜你的照片有问题。确保它们被正确读取,例如,通过将其写入新文件。还要先测试另一对图像。如果所有这些都通过,那么可能由于某种原因它无法估计相机参数。
<强>更新强> 看起来功能提取器有一个问题,很难说只是你发布的跟踪出了什么问题。在代码中设置特征提取器,看看它是如何进行的:
Stitcher stitch = Stitcher::createDefault(FALSE);
stitch.setFeaturesFinder(new detail::OrbFeaturesFinder());
第一行与您的代码相同,在第二行我们只告诉拼接器要使用哪个功能提取器。
答案 1 :(得分:0)
和
,代码是:
#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);