2016-11-08 16 views
0

私はちょうど私のプロジェクトをpythonでやっています。Pythonで多次元配列を追加するには?

動画全体の中で出現頻度の高い各ピクセルの値を考慮して、動画の背景を抽出します。このために、各フレームのピクセル値を前のフレーム値に追加したいと思います。

たとえば、私は合計フレーム400のビデオを持っています。フレームサイズは100X300です。各ループについて、現在のフレームの値を追加(連結)したいと思います。したがって、各ループ(ビデオでフレームを読み込む)の後、配列のサイズは、3番目の次元で1ずつ増加し、すべてのフレームを読み込んだ後、合計(100X300X400)の配列を持つ必要があります100行300列400奥行き!

次に、各ピクセルのヒストグラムを計算します。

本当にありがとうございます。

私はPycharmを使用してOpenCV 3.1とPython 2.7.12を使用しています。

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

感謝を。私は答えを見つけた。

result_array= [] 

その後、我々はによってresult_arrayにcurFrameを追加します:

result_array.append(curFrame) 
0

使用numpy.dstack第三軸で配列積み重ねる:私を助けるためにしようとするいずれかのために

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)