【问题标题】:OpenCV stitcher mode:SCANS crashes with certain propertiesOpenCV 拼接模式:SCANS 因某些属性而崩溃
【发布时间】:2019-06-26 20:28:38
【问题描述】:

我正在尝试设置平面图像拼接应用程序,但如果我在 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++ ios opencv3.0 objective-c++


    【解决方案1】:

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

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

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

    【讨论】:

    • 我弄乱了 GPU 标志,这似乎无关紧要,就像你说的那样,我尝试使用的特定类在 iOS 中被破坏了。
    【解决方案2】:

    使用 open cv 2.4.9 版本的 iOS 应用拼接。此外,使用此代码将非常适用于 iOS 应用程序

    https://github.com/foundry/OpenCVSwiftStitch

    我已经花了太多时间来修复崩溃,但现在它得到了修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多