2017年4月17日月曜日

OpenCV @Python で動画の手ブレ補正してみた


基本的には↓のコードをPythonに移植すれば、
素人目にはちゃんとブレが取れるものができるんさ。

 Simple video stabilization using OpenCV


Pythonのソースコードを載せないクズ→σ(゚∀゚ )オレ
んが、しかし
フレーム毎に抽出している特徴点(cv2.goodFeaturesToTrack)の軌跡を使ってカメラ移動(縦・横・回転)の平均をとっている関係上、次のような特徴があり、一般的に動画ファイルに対して手ブレ補正をかけようとすると、こまかい点で工夫が必要となります。
 
・抽出される特徴点が、必ずしもブレの除去に適していない…とか
・フレーム間で特徴点の変化が大きすぎるときには、cv2.calcOpticalFlowPyrLKがエラーを吐いて止まる…とか

 特徴点の発生する範囲や量をいろいろ弄る必要があり、往生しましたが、なんとなく僕の望んでいるものにはなってきたような気がします(-_-;)


※携帯カメラの性能が良くないせいか、あまりジッと見ていると酔います(-_-;)
左が補正前 右が補正後






Youtubeの自動手ブレ補正機能は、縦・横・回転により映像の端が不自然にならないよう、上手に調整してあります。流石です。 ←それ故、大きすぎる振動(ジェットコースターのオンボード映像等)の除去には限界がある模様