【发布时间】:2018-04-19 02:38:14
【问题描述】:
将包含 rgb 数据的 1D 数组转换为 3D RGB 数组的最佳方法是什么?
如果数组是这个顺序,那就很容易了,(一次重塑)
RGB RGB RGB RGB...
但是我的数组是这样的,
RRRR...GGGG....BBBB
有时甚至,
GGGG....RRRR..BBBB(结果仍然应该是 RGB 而不是 GRB)
我当然可以派生一些 Python 方法来实现这一点,我什至尝试了一个 numpy 解决方案,它可以工作,但它显然是一个糟糕的解决方案,我想知道什么是最好的方法,也许是一个内置的 numpy功能?
我的解决方案:
for i in range(len(video_string) // 921600 - 1): # Consecutive frames iterated over.
frame = video_string[921600 * i: 921600 * (i + 1)] # One frame
array = numpy.fromstring(frame, dtype=numpy.uint8) # Numpy array from one frame.
r = array[:307200].reshape(480, 640)
g = array[307200:614400].reshape(480, 640)
b = array[614400:].reshape(480, 640)
rgb = numpy.dstack((b, r, g)) # Bring them together as 3rd dimention
不要让 for 循环让您感到困惑,我只是将帧彼此连接成一个字符串,就像视频一样,这不是问题的一部分。
What did not help me: 在这个问题中,r、g、b 值已经是二维数组,所以对我的情况没有帮助。
Edit1:所需的数组形状为640 x 480 x 3
【问题讨论】:
-
如何在不知道高度或宽度的情况下重塑为
3D数组? -
@Divakar 抱歉我忘了说,我会编辑,但是可以看到一帧是 921600 字节,除以三,我们有 307200,它是 640x480 的乘积。跨度>