2017-11-29 13 views
0

私はビデオ用のスタビライザーを作っていましたが、私はアルゴリズムを他のものと比較しようとしていましたので、シフトを実装し、キーポイントをオプティカルフローアルゴリズムに渡したかったのです。cv2.calcOpticalFlowPyrLKのimputとしてopencv python cv2.xfeatures2d.SIFTを使用するにはどうすればよいですか?

sift = cv2.xfeatures2d.SIFT_create() 

その後、

frame.features = sift.detect(frame_img_gray,None) 
new_features, _, _ = cv2.calcOpticalFlowPyrLK(prev_frame_img, frame_img, prev_frame.features, None, **lk_params) 
     new_features_for_validation, _, _ = cv2.calcOpticalFlowPyrLK(frame_img, prev_frame_img, new_features, None,**lk_params) 

だから私は、コンパイラからこのメッセージが表示されます。

new_features, _, _ = cv2.calcOpticalFlowPyrLK(prev_frame_img, frame_img, prev_frame.features, None, **lk_params) 
TypeError: prevPts is not a numpy array, neither a scalar 

答えて

0

手動cv2.calcOpticalFlowPyrLKに適していると出力をSIFT再構築することができます

LK_pts=np.empty((0,1,2), np.float32) 
for pts in prev_frame.features: 
    x, y = pts.pt 
    LK_pts=np.append(LK_pts,np.array([[[x,y]]],dtype=np.float32),axis=0) 
+0

は遅いですが、動作します、ありがとうございます!! –

+0

@SamuelMarcosShermanはnumpyで追加するのが非常に遅いです。代わりに 'np.array([frame.features]のfの[[[f.pt [0]、f.pt [1]])'は速くなります。あなたはまだすべての機能を反復していますが、追加はしていません。 –

+0

このエラーが発生しました –

関連する問題