在ODROID XU4上与Python OpenCV/OpenCL共享GPU/CPU数据

在ODROID XU4上与Python OpenCV/OpenCL共享GPU/CPU数据,python,opencv,gpu,opencl,mali,Python,Opencv,Gpu,Opencl,Mali,我正在使用OpenCV 4.1和Python 3.6在ODROID XU4(三星Exynos5422和Mali-T628 GPU)上进行实时视频处理。我可以通过将包含图像的Numpy阵列转换为UMat来使用GPU,例如: img_umat = cv2.UMat(img_array) 这样一来,图像处理代码的运行速度就快于CPU;但是,与GPU之间的传输需要很长时间(在某些情况下约为0.03秒)。这有什么办法吗 我是GPU编程新手,一直对第8.3节摸不着头脑。我不知道默认的“cv2.UMat(a

我正在使用OpenCV 4.1和Python 3.6在ODROID XU4(三星Exynos5422和Mali-T628 GPU)上进行实时视频处理。我可以通过将包含图像的Numpy阵列转换为UMat来使用GPU,例如:

img_umat = cv2.UMat(img_array)
这样一来,图像处理代码的运行速度就快于CPU;但是,与GPU之间的传输需要很长时间(在某些情况下约为0.03秒)。这有什么办法吗

我是GPU编程新手,一直对第8.3节摸不着头脑。我不知道默认的“cv2.UMat(array)”初始值设定项是如何分配内存的,所以我尝试指定它,例如

host_mat = cv2.UMat(mat,cv2.USAGE_ALLOCATE_HOST_MEMORY)

但当我这样做时,不会抛出任何错误,并且host_mat是空的。我是做错了什么,还是完全走错了路?非常感谢您的建议。

它在8.3.1中说明了一切:要在应用程序处理器端使用缓冲区,您必须映射此缓冲区并将数据写入其中。因此,看起来您分配了缓冲区,但没有将数据复制到host_map empty中。@doqtor从这里的文档中,我可以看到如何在python中分配内存,但如何将数据复制到它。。。如果我尝试类似于
host\u mat[:]=img\u array[:]
的方法,我会得到一个错误:“cv2.UMat”对象不支持项目分配这将是特定于OpenCV而不是python的,我对OpenCV一点也不熟悉。您需要在OpenCV文档中检查这一点。在C++<代码> CeleQueMeAppBuffu/C++中,映射新分配的内存和 MycPy将数据复制到它中。它在83.1中表示:要在应用处理器侧使用缓冲区,必须映射该缓冲区并将数据写入其中。因此,看起来您分配了缓冲区,但没有将数据复制到host_map empty中。@doqtor从这里的文档中,我可以看到如何在python中分配内存,但如何将数据复制到它。。。如果我尝试类似于
host\u mat[:]=img\u array[:]
的方法,我会得到一个错误:“cv2.UMat”对象不支持项目分配这将是特定于OpenCV而不是python的,我对OpenCV一点也不熟悉。您需要在OpenCV文档中检查这一点。用C++ >代码> CeleQueMePAPBase用来映射这个新分配的内存和<代码> MeMCPY >将数据复制到它中。