2017-01-15 15 views
1

私はcv2.calcOpticalFlowFarneback()をPythonで使用してオプティカルフローの結果を取得していますが、その結果を使用する際に問題があります。私はその関数によって返された変更を描画したいが、Pythonでループするのは遅すぎる。私はそれを速くするnumpyとメソッドがあると確信しています。ここに私の試みOpenCVでループなしのcalcOpticalFlowFarnebackの結果を描画

flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, pyr_scale=0.5, levels=5, winsize=13, iterations=10, poly_n=5, poly_sigma=1.1, flags=0,flow=None) 

for y in range(0, flow.shape[0], 5): 

    for x in range(0, flow.shape[1], 5): 

     fx, fy = flow[y, x] 

     cv2.line(frame2, (x,y), (int(x+fx),int(y+fy)), (255,0,0)) 
     cv2.circle(frame2, (x,y), 1, (255,0,0), -1) 

答えて

1

は、あなたがのためにループを繰り返すためにすることなく、多角形曲線の配列を描画するために)(OpenCVの方法cv2.polylinesを使用することができます。ここ

は、OpenCVのサンプルアウト

def draw_flow(self, img, flow, step=16): 
    h, w = img.shape[:2] 
    y, x = np.mgrid[step/2:h:step, step/2:w:step].reshape(2, -1).astype(int) 
    fx, fy = flow[y, x].T 
    lines = np.vstack([x, y, x + fx, y + fy]).T.reshape(-1, 2, 2) 
    lines = np.int32(lines + 0.5) 
    vis = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) 
    cv2.polylines(vis, lines, 0, (0, 255, 0)) 
    for (x1, y1), (x2, y2) in lines: 
     cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1) 
    return vis 

チェックがポリラインの詳細情報を取得するために、完全なコードhttps://github.com/opencv/opencv/blob/master/samples/python/opt_flow.py

またはOpenCVのドキュメントをダウンロードして実行するコードサンプルですhttp://docs.opencv.org/3.0-beta/modules/imgproc/doc/drawing_functions.html#polylines

関連する問題