2016-11-08 76 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)