#MTS形式動画からきれいな静止画を取得できない
今回はインターン先でOpenCVを使っていた時にはまった問題と解決方法について書いていきます。
##やろうとしていること
動画からきれいに画像を取得すること。
すでにある画像認識のための機械学習モデルがあり、そのモデルではどの画像をどのように識別したかを確認することができる。
クライアント様への説明もあるため人間による正解データとの比較が必要になった。
そのためにOpenCVを利用して動画から識別される部分の画像を切り取っていった。
##問題点
切り取った画像は動体が非常にぶれており細かい部分の確認ができない状態になっていた。
動いている物体の文字を確認したかったのだが、ブレにぶれまくっておりとてもではないが識字できない状態になっていた。
しかしながら、動画で一時停止してみると多少ぶれてはいるが識字できる状態であった。
つまり一時停止とOpenCVを用いた切り抜きに鮮明度で差が生まれていた。
この時に頭の中に2パターンの可能性が浮かんでいました。
1.OpenCVが原因でうまく読み込めていない場合。
2.動画形式が前後の補完によってきれいに見せることができている場合。
結果的には1のOpenCVが原因(正確にはFFmpeg)でうまく読み込めていませんでした。
##原因
原因は動画のインターレースでした。動画のインターレースとは動画のFPSを変更せずに滑らかに見せるために差し込まれる画像のことで、OpenCVをインターレースのある動画を切り抜くと非常にブレた画像のようになってしまいます。
##対処法
極論言えば動画のインターレースを削除すればいいです。自分が行った内容はAviUtlでのでインターレースを行いました。
参考記事
【AviUtl】インターレース解除する4つの方法【デインターレース】
またプログラムからも可能なようです。
参考記事
CCDカメラで撮像した画像をOpenCVを使って縞々模様を除去する
僕の場合は動画の数も少なかったのでAviUtlを使いましたが、細かい動画がたくさんある場合はプログラムの方が便利そうですね。