我正在使用OpenCV及其Python中的cuda函数处理图像
我有一个大小为(300300)的OpenCV GMat和3个通道。在numpy中,该形状将为300x300x3
我需要在OpenCV中执行与numpy_array.transpose((2,0,1))等效的numpy函数,我希望在GPU上执行此操作。换句话说,我希望通道是第一个轴,而不是最后一个轴
在努比:
numpy_array = np.random.randint(0, 255, (300, 300, 3), dtype='uint8')
... various operations...
numpy_array.transpose((2, 0, 1))
在OpenCV-CUDA中:
gpu_frame = cv2.cuda_GpuMat()
gpu_frame.upload(numpy_frame)
...various operations...
# TODO: how to move channels to first axis?
我该怎么做
这种特定的转置操作(从最快的变化维度到最慢的变化维度的变化)在OpenCV中得到支持,但是我认为在C++或Python中还没有^ {CD1>}支持。p>
要对
cv::Mat
执行此操作,可以使用cv::dnn::blobFromImage。这在C++中是很方便的,但是在Python中则不那么方便(因为你可以使用NUMPY)。也就是说,在python中,cv2.dnn.blobFromImage(numpy_array)[0]
等同于numpy_array.transpose((2, 0, 1))
有关
GpuMat
的类似API的讨论,请参见此github issue相关问题 更多 >
编程相关推荐