首页 > 解决方案 > OpenCV 拼接模式:SCANS 因某些属性而崩溃

问题描述

我正在尝试设置平面图像拼接应用程序,但如果我在 PlaneWarper 下方提供拼接器,应用程序会因访问异常错误而崩溃。我还了解到 ORB 特征查找最适合平面拼接,但使用 OrbFeatureFinder 也会导致应用程序在拼接函数中崩溃。我知道我并不完全了解拼接管道的工作原理,所以如果有人能帮助我理解这里的问题,我将不胜感激。

vector<Mat> imgs;

cv::Mat stitch (vector<Mat>& images)
{
    imgs = images;

    Mat pano;
    Ptr<Stitcher> stitcher = Stitcher::create(Stitcher::SCANS, true);
    stitcher->setPanoConfidenceThresh(0.8f);
    stitcher->setFeaturesMatcher(makePtr<cv::detail::AffineBestOf2NearestMatcher>(true, true, 0.8f));
    Stitcher::Status status = stitcher->stitch(imgs, pano);

    if (status != Stitcher::OK)
    {
        cout << "Can't stitch images, error code = " << int(status) << endl;
        //return 0;
    }
    return pano;
}

我已经在我的 Mac 上测试了带有 Orb 特征查找和平面翘曲的stitching_detailed 程序,它给了我很好的结果,所以我尝试在 iOS 应用程序界面中运行stitching_detailed.cpp,但这会导致所有类型的崩溃,所以我正在尝试现在这样。

拼接效果很好,但这里和那里有一些失真,并且使用 ORB 特征发现和平面翘曲在我的 Mac 上消除了它。

标签: c++iosopencv3.0objective-c++

解决方案


我只是粗略地看了一下,但我怀疑你的问题在于 OpenCV 的结构。在 Mac 上运行时,它可以通过 OpenCL 使用 GPU。但是,在 iOS 设备上运行时,它不能使用 OpenCL,因为它不受支持。因此,它必须使用此处找到的基于 CPU 的实现。

https://github.com/opencv/opencv/blob/808ba552c532408bddd5fe51784cf4209296448a/modules/stitching/src/stitcher.cpp

您将看到该变量try_use_gpu被广泛使用,并且根据它的配置和运行方式,这可能是罪魁祸首。虽然我不能确定你的情况,但我之前发现有 iOS 特定的功能被破坏,甚至根本不存在。话虽如此,您可能希望向项目提出问题,希望有人可以接手并修复它。


推荐阅读