python - 使用 Python 和 Opencv,如何将 Umat 转换回 mat?
问题描述
我的项目是用 python 3.6 编写的,我使用的是opencv和fast.ai。
我正在尝试确定 Umat 在某些实时视频分析方面是否能胜过 mat。我有代码可以检测视频帧中的对象,然后得到一个边界框。我裁剪图像,然后将其传递给神经网络。
在我的 cpu 上处理每一帧视频所需的时间约为 23 毫秒。
我想尝试使用 Umat 看看是否可以更快地完成。但是,在将图像输入神经网络之前,需要将其转换回 fastai 可以理解的内容。以下代码适用于常规垫图像。如果我要通过frame
而不是uframe
to 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
我知道这个错误与轴数据的存储方式有关,但我不确定该怎么做。我想将图像转换回垫子,或者可能更改 Umat 的轴数据。有谁知道这样做的最有效方法?
解决方案
推荐阅读
- python - Django 应用程序 - 从 S3 获取静态文件
- javascript - 递归地从对象中删除编号的键
- r - 如果它与向量中的项目匹配,则替换整个数据框中的所有值
- springdoc - 使用 GroupedOpenApi bean 时未在 Swagger-UI 中添加 Springdoc-openapi 全局标头
- r - 在 CVXR 中,如何使用外部 c++ 函数?
- mysql - 使用python将数据插入mysql时出错
- c# - 在移动的同时跳跃时跳跃没有那么高
- ios - Google Mobile Ads v8 - 您如何确定哪个插页式广告被忽略了?
- php - Payee Poprety PayPal Checkout V2 的问题
- cmake - 我只能用 make 构建一次