【问题标题】:Using OpenCL accelerated functions with OpenCV3 in Python在 Python 中使用 OpenCL 加速函数和 OpenCV3
【发布时间】:2015-11-06 13:31:42
【问题描述】:

OpenCV3 引入了它的 T-API(透明 API),它使用户可以使用 GPU(或其他支持 OpenCL 的设备)加速的功能,我正在努力寻找如何使用 Python 来利用它。

在 C++ 中,当您使用 UMat 而不是 Mat 对象时,像 ocl::setUseOpenCL(true); 这样的调用会启用 OpenCL 加速。但是我没有找到任何关于 Python 的文档。

有人有关于如何在 Python 中使用 OpenCV3 实现 OpenCL 加速的示例代码、链接或指南吗?

更新:

经过进一步挖掘,我在modules/core/include/opencv2/core/ocl.hpp 找到了这个:

CV_EXPORTS_W bool haveOpenCL();
CV_EXPORTS_W bool useOpenCL();
CV_EXPORTS_W bool haveAmdBlas();
CV_EXPORTS_W bool haveAmdFft();
CV_EXPORTS_W void setUseOpenCL(bool flag);
CV_EXPORTS_W void finish();

我设法从 Python 调用:

print(cv2.ocl.haveOpenCL())
cv2.ocl.setUseOpenCL(True)
print(cv2.ocl.useOpenCL())

它会产生以下输出:

True
True

但是它仍然运行相同,我想我仍然没有使用 OpenCL,因为我没有在 Python 中使用 UMat。

【问题讨论】:

    标签: python opencl opencv3.0


    【解决方案1】:

    OpenCV 3.2 及更高版本支持透明 API。这是一个示例代码。

    import cv2
    
    img = cv2.UMat(cv2.imread("image.jpg", cv2.IMREAD_COLOR))
    imgUMat = cv2.UMat(img)
    gray = cv2.cvtColor(imgUMat, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (7, 7), 1.5)
    gray = cv2.Canny(gray, 0, 50)
    
    cv2.imshow("edges", gray)
    cv2.waitKey();
    

    更多详情请访问OpenCV Transparent API

    【讨论】:

      【解决方案2】:

      根据this issue 的说法,目前仍然缺乏对这个功能的支持,但正在“进行中”,当有更多可用时我会更新。

      【讨论】:

      • 你有关于这个问题的消息吗?
      • 是的,查看问题后,他们将其关闭并发布了此修复程序,该修复程序完全涵盖了该问题。 github.com/opencv/opencv/pull/6078
      【解决方案3】:

      信息更新

      对于那些看到这个的人来说,OpenCL for OpenCV python 版本已经被实施了

      2016 年 10 月 6 日

      更多信息

      更多信息可以看一下这个问题:T-API python support implemented #6078

      【讨论】:

        猜你喜欢
        • 2014-11-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
        相关资源
        最近更新 更多