Chr*_*ris 52 python arrays opencv numpy
我开始使用numpy数组图像.
In[1]:img = cv2.imread('test.jpg')
Run Code Online (Sandbox Code Playgroud)
形状是您对640x480 RGB图像的期望.
In[2]:img.shape
Out[2]: (480, 640, 3)
Run Code Online (Sandbox Code Playgroud)
但是,我拥有的这个图像是一个100帧长的视频帧.理想情况下,我希望有一个包含此视频中所有数据的单个数组,以便img.shape
返回(480, 640, 3, 100)
.
将下一帧(即下一组图像数据,另一个480 x 640 x 3阵列)添加到我的初始阵列的最佳方法是什么?
dbl*_*iss 54
您正在询问如何向NumPy数组添加维度,以便可以增大该维度以适应新数据.可以按如下方式添加维度:
__CODE__
.
Cle*_*leb 34
或者替代
image = image[..., np.newaxis]
Run Code Online (Sandbox Code Playgroud)
在@dbliss的回答中,你也可以使用numpy.expand_dims
喜欢
image = np.expand_dims(image, <your desired dimension>)
Run Code Online (Sandbox Code Playgroud)
例如(取自上面的链接):
x = np.array([1, 2])
print(x.shape) # prints (2,)
Run Code Online (Sandbox Code Playgroud)
然后
y = np.expand_dims(x, axis=0)
Run Code Online (Sandbox Code Playgroud)
产量
array([[1, 2]])
Run Code Online (Sandbox Code Playgroud)
和
y.shape
Run Code Online (Sandbox Code Playgroud)
给
(1, 2)
Run Code Online (Sandbox Code Playgroud)
Jos*_*del 20
您可以在前面创建一个正确大小的数组并填充它:
frames = np.empty((480, 640, 3, 100))
for k in xrange(nframes):
frames[:,:,:,k] = cv2.imread('frame_{}.jpg'.format(k))
Run Code Online (Sandbox Code Playgroud)
如果帧是以某种特定方式命名的单个jpg文件(在示例中为frame_0.jpg,frame_1.jpg等).
只需注意,您可以考虑使用(nframes, 480,640,3)
形状阵列.
0-_*_*_-0 18
蟒蛇式
X = X[:, :, None]
这相当于
X = X[:, :, numpy.newaxis]
和
X = numpy.expand_dims(X, axis=-1)
但是,当您明确询问堆叠图像时,我建议您将可能收集到list
的图像np.stack([X1, X2, X3])
进行循环堆叠。
如果您不喜欢尺寸的顺序,您可以重新排列 np.transpose()
小智 13
a = np.expand_dims(a, axis=-1)
Run Code Online (Sandbox Code Playgroud)
或者
a = a[:, np.newaxis]
Run Code Online (Sandbox Code Playgroud)
或者
a = a.reshape(a.shape + (1,))
Run Code Online (Sandbox Code Playgroud)
您可以使用np.concatenate()
指定axis
要追加的内容np.newaxis
:
import numpy as np
movie = np.concatenate((img1[:,np.newaxis], img2[:,np.newaxis]), axis=3)
Run Code Online (Sandbox Code Playgroud)
如果要读取许多文件:
import glob
movie = np.concatenate([cv2.imread(p)[:,np.newaxis] for p in glob.glob('*.jpg')], axis=3)
Run Code Online (Sandbox Code Playgroud)