Как изменить данные кадра в 3D-массиве NP? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть данные в трехмерном массиве, такие как:

[[[ 41  57  64 255]
  [ 57  76  79 255]
  [ 92 113 115 255]
  ...
  [ 70  89  80 255]
  [106 127 118 255]
  [140 161 152 255]]]

array.shape = (360, 640, 4)

, и я хочу превратить их в что-то вроде:

[[[120 125 110]
  [120 125 110]
  [120 126 109]
  ...
  [192 207 189]
  [194 207 189]
  [195 208 190]]]

array.shape = (480, 640, 3)

Эти два набора данных взяты с двух разных камер.Могу ли я изменить форму массива?После изменения формы рамка будет отображаться правильно?

Я пытаюсь использовать np.reshape () и конвертировать в list и pop, но метод списка очень медленный и не может отображаться правильно

np.reshape ValueError: cannot reshape array of size 921600 into shape (360,640,3)

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Вы получаете ошибку из-за разницы в общем количестве элементов в двух случаях:

360*640*3=691200
480*640* 3=921600

Numpy reshape работает только тогда, когда количество элементов в предыдущем и измененном массиве одинаково.

Вы можете попробовать заполнить нулями, если хотите.

0 голосов
/ 27 сентября 2018

Я взял этот пример, и он работал для меня.

import numpy as np

x = np.zeros((360,640,4))
print(x.shape)
print(x)

y = x.reshape(480,640,3)
print(y)
print(y.shape)
0 голосов
/ 27 сентября 2018

Первое изображение выглядит как изображение 360 x 640 rgba, а второе - изображение 480 x 640 rgb.Итак, вы можете заполнить первые нулями и удалить последний элемент 3-го измерения.

import numpy as np

array1 = np.arange(360*640*4).reshape((360, 640, 4)) # example
array2 = np.arange(480*640*3).reshape((480, 640, 3)) # example

zeros = np.zeros(array2.shape, dtype=np.int32)
zeros[60:-60,:,:] = array1[:,:,:-1]
modified_array1 = zeros

print modified_array1.shape, array2.shape

производит:

(480, 640, 3) (480, 640, 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...