2017-08-22 23 views
0

私は現在、OpenCVとPythonを使ってビデオの安定化を図っています。OpenCV Python cv2.perspectiveTransform

def accumulate_rotation(src, theta_x, theta_y, theta_z, timestamps, prev, current, f, gyro_delay=None, gyro_drift=None, shutter_duration=None): 
    if prev == current: 
     return src 

    pts = [] 
    pts_transformed = [] 
    for x in range(10): 
     current_row = [] 
     current_row_transformed = [] 
     pixel_x = x * (src.shape[1]/10) 
     for y in range(10): 
      pixel_y = y * (src.shape[0]/10) 
      current_row.append([pixel_x, pixel_y]) 

      if shutter_duration: 
       y_timestamp = current + shutter_duration * (pixel_y - src.shape[0]/2) 
      else: 
       y_timestamp = current 

      transform = getAccumulatedRotation(src.shape[1], src.shape[0], theta_x, theta_y, theta_z, timestamps, prev, 
               current, f, gyro_delay, gyro_drift) 

      output = cv2.perspectiveTransform(np.array([[pixel_x, pixel_y]], dtype="float32"), transform) 
      current_row_transformed.append(output) 

     pts.append(current_row) 
     pts_transformed.append(current_row_transformed) 

    o = utilities.meshwarp(src, pts_transformed) 
    return o 

それはoutput = cv2.perspectiveTransform(np.array([[pixel_x, pixel_y]], dtype="float32"), transform)になったとき、私は次のエラーを取得する:私は回転を計算するには、次の機能を使用し

cv2.error: /Users/travis/build/skvark/opencv-python/opencv/modules/core/src/matmul.cpp:2271: error: (-215) scn + 1 == m.cols in function perspectiveTransform

すべてのヘルプや提案は本当にいただければ幸いです。

答えて

1

この実装は、将来のバージョンで実際に変更する必要があります。 perspectiveTransform()ためOpenCVのドキュメントから

SRC - 私が追加入力2チャンネル(...)浮動小数点アレイ

スラント重点。

>>> A = np.array([[0, 0]], dtype=np.float32) 
>>> A.shape 
(1, 2) 

だから我々はAはつまり、二次元、ちょうどシングルチャネル行列であることをここからご覧ください。 1列、2列。代わりに、2チャンネルの画像、つまり、2Dまたは3Dポイントで送信するかどうかによって3次元の長さが2または3の3次元マトリックスが必要です。

短い話をすると、xの値が最初のチャンネルにあり、2番目のチャンネルにyの値が入っている3次元で送信しているポイントのセットを追加するには、もう1つの角括弧を追加する必要がありますチャネル。

>>> A = np.array([[[0, 0]]], dtype=np.float32) 
>>> A.shape 
(1, 1, 2) 

それは直感的ではなく、文書化されていますが、それはあまり明確ではありません。それだけで十分です。私はidentical question beforeに答えましたが、cv2.transform()の機能については答えました。

関連する問題