在Python中使用OpenCLV3加速函数

时间:2015-08-13 14:10:45

标签: python opencl opencv3.0

OpenCV3引入了其T-API(透明API),使用户可以使用GPU(或其他支持OpenCL的设备)加速的功能,我很难找到如何利用Python进入的功能。

使用C ++时,有ocl::setUseOpenCL(true);这样的调用可以在您使用UMat而不是Mat个对象时启用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。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

信息更新

对于那些看到这个的人来说,OpenCL for OpenCV python 版本已经被强制执行

于2016年10月6日

更多信息

有关详细信息,您可以查看此问题:T-API python support implemented #6078

答案 2 :(得分:2)

OpenCV 3.2及更高版本支持Transparent 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

找到更多详情