使用Python和Opencv,如何将Umat转换回mat?
我的项目是用python 3.6编写的,我正在使用和 我正在尝试确定Umat是否能在一些现场视频分析方面胜过mat。我有代码可以检测视频帧中的对象,然后得到一个边界框。我裁剪图像,然后将其传递给神经网络 在我的cpu上处理每一帧视频所需的时间约为23毫秒 我想尝试使用Umat,看看是否可以做得更快。然而,在将图像输入神经网络之前,需要将其转换回fastai能够理解的内容。以下代码适用于常规mat图像。如果我将使用Python和Opencv,如何将Umat转换回mat?,python,opencv,opencl,mat,Python,Opencv,Opencl,Mat,我的项目是用python 3.6编写的,我正在使用和 我正在尝试确定Umat是否能在一些现场视频分析方面胜过mat。我有代码可以检测视频帧中的对象,然后得到一个边界框。我裁剪图像,然后将其传递给神经网络 在我的cpu上处理每一帧视频所需的时间约为23毫秒 我想尝试使用Umat,看看是否可以做得更快。然而,在将图像输入神经网络之前,需要将其转换回fastai能够理解的内容。以下代码适用于常规mat图像。如果我将frame而不是uframe传递到cv2.Umat(),那么代码工作得非常好 # get
frame
而不是uframe
传递到cv2.Umat()
,那么代码工作得非常好
# get a frame of video and make a Umat out of it.
frame = video.read()
uframe = cv2.UMat(frame)
# Do stuff to uframe; grayscale, background subtraction, get object coordinates.
# crop the image.
cropped_image = cv2.UMat(uframe, [[x1:x2],[y1:y2]])
# color space conversion for fastai compatibility
swapped_image = cv2.cvtColor(cropped_image, cv2.COLOR_BGR2RGB)
# convert to fastai Image class
fastai_image = Image(pil2tensor(swapped_image, dtype=np.float32).div_(255))
# Send fastai_image image to neural network.
但是,当我如上图所示运行代码时,(将Uframe
传递到cv2.Umat()
),代码在fastai_image=image(pil2tensor()
)处失败,但有一个例外:
ValueError: axes don't match array
我知道此错误与轴数据的存储方式有关,但我不确定如何处理。我想将图像转换回mat,或者可能更改Umat的轴数据。有人知道最有效的方法吗?
cv2.Umat.get(交换的\u图像)
这很有效,谢谢!不幸的是,到目前为止,它的运行速度似乎差不多,但我会继续修补它,看看是否可以改进它。是的,UMat
上可能做的工作太少了,因此无论您在颜色转换上节省多少,都会在将数据移动到UMat
cv2的开销中丢失。UMat.get(交换的图像)这很有效,谢谢!不幸的是,到目前为止,它的运行速度似乎大致相同,但我会继续修补它,看看是否可以改进它。是的,UMat
上可能做的工作太少了,因此无论您在颜色转换上节省多少,都会在将数据移动到UMat
的开销中丢失。