Используя Python и Opencv, как мне конвертировать Umat обратно в mat? - PullRequest
0 голосов
/ 14 мая 2019

Мой проект написан на python 3.6, и я использую opencv и fast.ai .

Я пытаюсь определить, может ли Umat превзойти мат для некоторого анализа живого видео.У меня есть код, который работает для обнаружения объектов в кадре видео, а затем получить ограничивающий прямоугольник.Я обрезаю изображение и затем передаю его в нейронную сеть.

Время, необходимое для обработки каждого кадра видео на моем процессоре, составляет около 23 миллисекунд.

Я хотел бы попробовать использоватьУмат, чтобы увидеть, можно ли это сделать быстрее.Однако, прежде чем изображение может быть передано в нейронную сеть, его необходимо преобразовать обратно в то, что понимает Фастай.Следующий код работает с обычными матовыми изображениями.Если бы я передал 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

Я знаю, что эта ошибка связана с тем, как хранятся данные оси, но я не уверен, что с этим делать.Я хотел бы либо преобразовать изображение обратно в мат, либо, возможно, изменить данные оси Umat.Кто-нибудь знает наиболее эффективный способ сделать это?

...