CV高度、宽度、通道到通道、高度、宽度

2024-09-19 14:20:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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?

我该怎么做


Tags: to函数图像numpygpuarrayframeopencv
1条回答
网友
1楼 · 发布于 2024-09-19 14:20:59

这种特定的转置操作(从最快的变化维度到最慢的变化维度的变化)在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

相关问题 更多 >