Python 用pycuda和opencv并行读取图像

Python 用pycuda和opencv并行读取图像,python,c++,opencv,parallel-processing,pycuda,Python,C++,Opencv,Parallel Processing,Pycuda,我有一个在每次迭代中读取图像的程序: for h in range(H): for w in range(W): z = depth_map[h,w] val = content_map[h,w] img = cv2.imread('h' + str(h) + '_w' + str(w) + '_z' + str(z) + '.png') res[h-grid_h:h+grid_h+1,w-grid_w:w+grid_w+1

我有一个在每次迭代中读取图像的程序:

for h in range(H):
    for w in range(W):
        z = depth_map[h,w]
        val = content_map[h,w]
        img = cv2.imread('h' + str(h) + '_w' + str(w) + '_z' + str(z) + '.png')
        res[h-grid_h:h+grid_h+1,w-grid_w:w+grid_w+1] = val * img
我想并行处理,目前我正在使用cpu多处理和发送H范围,并最终将其汇总在一起

pool = multiprocessing.Pool(processes=num_of_processes)
x = pool.map(func, hrange)
pool.close()
pool.join()
这是非常有用的,但是,由于简单的运算符(仅读取和乘法),我相信gpu可能会显著加速它,这对我来说非常重要

我发现pycuda在gpu多处理方面很有帮助:

具体地说,是用C++编写的底层,例如从doc:

import pycuda.autoinit
import pycuda.driver as drv
import numpy

from pycuda.compiler import SourceModule
mod = SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
  const int i = threadIdx.x;
  dest[i] = a[i] * b[i];
}
""")

multiply_them = mod.get_function("multiply_them")
我想使用该层并操作输入h和w的功能,这可以通过以下操作实现:

Mat img = imread(image_path, IMREAD_COLOR)
但它需要包括:

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
#包括
#包括
#包括
#包括
使用名称空间cv;
我得到了以下错误:

b'/tmp/tmpkj_doq74.cu:3:14: fatal error: opencv2/core.hpp: No such file or directory\n     #include <opencv2/core.hpp>\n              ^~~~~~~~~~~~~~~~~~\ncompilation terminated.\n']
b'/tmp/tmpkj\u doq74.cu:3:14:致命错误:opencv2/core.hpp:没有这样的文件或目录\n#include\n^~~~~~~~~~~~~~~~~~\n编译已终止。\n']
当我使用pycuda时,如何导入该库

可选的,可以用Python CV2代替C+++

进行并行计算吗?