2016-11-08 73 views
0

我刚刚开始用python做我的项目。如何在Python中添加多维数组?

我想通过考虑在整个视频中出现的每个像素的值来提取视频中的背景。为此,我想将每个帧的像素值添加到前一个。

为了使它更简化,例如,我有一个视频,总帧数为400.帧大小为100X300。对于每个循环,我想追加(连接)当前帧的值。因此,在每个循环(用于读取视频中的帧)之后,数组的大小应该在第三个维度上增加1,并且在读取所有帧之后,我应该有一个大小为(100X300X400)的数组 - >数组100行,300列,400深度!

然后,我将计算每个像素的直方图。

您的帮助真的很感谢。

我正在使用OpenCV 3.1和Python 2.7.12使用Pycharm。

import cv2 
import numpy as np 

c = cv2.VideoCapture('NonStop_stab.mp4') 
width = c.get(cv2.CAP_PROP_FRAME_WIDTH) 
height = c.get(cv2.CAP_PROP_FRAME_HEIGHT) 
numOfFrame= c.get(cv2.CAP_PROP_FRAME_COUNT) 

fps= c.get(cv2.CAP_PROP_FPS) 
size = (int(width), int(height)) 


_, f = c.read() 

prevFrame= f 

result_array= prevFrame 

while c.isOpened(): 

    #Here is the part I am asking 
    result_array = np.append(result_array, [prevFrame]) 
    # 
    ret, f = c.read() 
    curFrame= f 


    if ret == True: 

     ...['Do Something'] 


     k = cv2.waitKey(20) 
     if k == 27: 
      print result_array.shape 
      break 

    else: 
     break 

cv2.destroyAllWindows() 
c.release() 
out.release() 
+1

,你能否告诉到目前为止已经编写了什么,并解释,由引用你的代码哪些领域给你带来困难? – idjaw

+0

我添加了我目前拥有的代码。我刚刚使用append(),但结果不像我想要的。 “result_array.shape”的输出就像(3185L,)! –

回答

0

感谢谁试图帮助我的任何一个。我找到了答案。 就在我们定义一个空数组while()循环:

result_array= [] 

然后我们追加curFrame到result_array由:

result_array.append(curFrame) 
0

使用numpy.dstack堆叠阵列中的第3轴:

In [1]: import numpy 

In [2]: d = numpy.random.random((5,5)) 

In [3]: d.shape 
Out[3]: (5, 5) 

In [4]: for i in range(10): d=numpy.dstack((d,numpy.random.random((5,5)))) 

In [5]: d.shape 
Out[5]: (5, 5, 11)