OpenCV(C ++)拼接器没有写入OutputArray

时间:2016-10-26 15:22:04

标签: c++ opencv image-stitching opencv-stitching

我目前正在使用360°相机,并希望使用OpenCV的球形整经机。但是,每次我尝试运行一个使用拼接功能的简单程序时,都无法返回拼接图像。我基本上只是拍摄360°的照片,将它分成两个单独的照片(前后镜头)并想要将它们拼接在一起。

以下是代码:

Mat srcImage = imread("assets/360_0043.JPG");
Mat frontLensImage(srcImage, Rect(0, 0, srcImage.cols / 2, srcImage.rows));
Mat rearLensImage(srcImage, Rect(srcImage.rows, 0, srcImage.cols / 2, srcImage.rows));

vector<Mat> imagesToStitch;
imagesToStitch.push_back(frontLensImage);
imagesToStitch.push_back(rearLensImage);

Mat panorama;
Stitcher stitcher = Stitcher::createDefault();
if(!imagesToStitch.empty()){
    stitcher.stitch(imagesToStitch, panorama);
    imshow("test", panorama);
    waitKey(0);
}
else{
    cout << "ERROR: Image array empty" << endl;
}

return 0;

尝试运行时,会返回此错误:

OpenCV Error: Assertion failed (ssize.area() > 0) in resize, file /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc/src/imgwarp.cpp, line 1834
terminate called after throwing an instance of 'cv::Exception'
what():  /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc/src/imgwarp.cpp:1834: error: (-215) ssize.area() > 0 in function resize

调试时,panorama是一个空对象,即使我将其作为OutputArray传递给stitcher.stitch。我彻底搜索了网络,找不到解决方案,所以非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

有点解决了。显然,OpenCVs内存管理不喜欢你一直引用相同的地址。由于我的两个图像都依赖于srcImage,我认为这是错误所在。我做了一个快速的解决方法,看起来像这样:

Mat unprocessedFrontLensImage(srcImage, Rect(0, 0, 3 * srcImage.cols / 4, srcImage.rows));
Mat unprocessedRearLensImage(srcImage, Rect(srcImage.cols / 4, 0, 3 * srcImage.cols / 4, srcImage.rows));
imwrite("left.jpg", unprocessedFrontLensImage);
imwrite("right.jpg", unprocessedRearLensImage);
Mat frontLensImage = imread("left.jpg");
Mat rearLensImage = imread("right.jpg");

像魅力一样工作。我知道,不要教我冗余问题。我要清理并重构它,这只是我现在的解决方法。