OpenCV图像拼接器Stitcher 无法使用GPU加速

OpenCV 使用Stitcher 命令行模式下使用 try_cuda yes时,出现throw_no_cuda 的error

  • 因为项目需求, 最近在使用opencv 里的Stitcher 拼接器,
    使用CPU版本可以正常运行,两张图片(640×480)拼接时间在650ms左右。后来使用GPU加速Stitcher时,怎奈无法运行,总是给出throw_no_cuda的错误(CUDA均配置好)。
    如下: Error截图

    于是上网度来度去,终于找到了解释。
    1 )Stitcher 类实现图像拼接需要很多步骤,网上详细列有。其中有一个步骤的算法叫:最佳缝合线拼接算法,使用的是GraphCut (图割)算法,用于消除拼接时产生的“鬼影”。
    2) GraphCut_CPU算法可以跑的通, 但是opencv 的 GraphCut_GPU算法 在CUDA7.5以上的版本中,就不支持了(不明白原因,可能涉及专利保护?)。所以要想使用必须得降级CUDA版本。但是目前主流的显卡的驱动基本都不支持CUDA8.0以下了,所以这个问题暂时无解。
    3) 命令行模式下,我们会发现,如果使用–try_cuda yes --seam dp_color (或者–seam dp_colorgrad) 它可以运行,但是它实际是在CPU模式下运行的(运行时间比cpu版本的grapcut快)。很不幸,只有 --seam gc_color 和 --seam gc_colorgrad (图割) 是支持GPU的。 此外,经检验 使用dp_color的效果(清晰度)没有gc_color(图割)算法缝合的好。

    因此,无奈之举,可以利用OpenCV中一些特征检测API,例如SURF,ORB等,按照图像拼接步骤,一步步来。其中耗时的SURF可以upload到GPU中计算,配合后续步骤可以实现简单的图像拼接。(当然,效果也远不及Stitcher类自带的算法,这个算法步骤太多优化了,很多不理解)。

你可能感兴趣的:(OpenCV图像拼接器Stitcher 无法使用GPU加速)