同じ効果のフィルタがネイティブフィルタに取り入れられた。
avfilter: add erosion, dilation, deflate & inflate filter · FFmpeg/FFmpeg@3001558
さらに処理の速いmorpho
フィルタも実装された。
avfilter: add morpho filter · FFmpeg/FFmpeg@b2ec4ed
Windows向けのFFmpegにはOpenCVが有効になっていないのでこれを有効にして使える3つのフィルタについて。
OpenCVをコンパイルする
公式サイト:OpenCV | OpenCV
github:Releases · opencv/opencv
VERSION 2.4.13.2を保存する。(3.xがうまくリンクできなくなっていたので変更した、2017年2月22日)
2018年12月現在ではopencv 3.4.0までしか使えない。
- #7059 (Compile error in ffmpeg git master with opencv 3.4.1) – FFmpeg
- #7608 (Add opencv 4 support) – FFmpeg
- Release OpenCV 3.4.0 · opencv/opencv
OpenCV のコンパイルには CMake から主に Visual Studio を使う場合と、MSYS を使う場合があり、今回は手軽に導入できるMSYSでコンパイルする。
Visual Studio を使う場合はこちらを参考にする。
OpenCV3.0.0のビルド – AkiWiki
Releases · msysgit/msysgit · GitHubにXhmikosR’s Buildsの full を上書きして環境を作り、etc の fstab のドライブレターを解凍先に変更する。
msys.bat を実行すると home フォルダが出来てその中のユーザー名フォルダの中にソースコードを解凍してコンパイルしていく。
opencv-2.4.13.2.zip を解凍して、build ディレクトリを作る。次に cmake をインストールするか zip なら環境変数にパスを通しておく。
git から取得する場合。ffmpeg に不要なライブラリはコンパイルしない。x86 用の DLL しかできなかったので 64bit ffmpeg はよく分からない。
インストールが終わると、build/unix-install に opencv.pc があり、 opencv.pc を書き換えて、mingw/i686-w64-mingw32/lib/pkgconfig に移動する。
dll を mingw/i686-w64-mingw32/x86/mingw/bin から mingw/i686-w64-mingw32/lib に移動する。
そして ffmpeg の configure に--enable-libopencv
をつけてビルドする。ffmpeg の実行には opencv.pc で指定した libopencv_core2413.dll, libopencv_imgproc2413.dll が必要になる。
OpenCV のフィルタ内容
ffmpeg で使える OpenCV フィルタは dilate, erode, smooth の3つ。
公式ドキュメント:FFmpeg Filters Documentation : ocv
該当コード:FFmpeg/vf_libopencv.c at master · FFmpeg/FFmpeg
- dilate
膨張フィルタで色の境界を縮小する。設定を強めるほど白っぽくなり小さい文字などの細かい描写の境がなくなる。最初のかけ算で明度のピクセル指定で、次のかけ算は最初のかけ算の値より小さくなければならない。次の文字列は rect, cross, ellipse が指定できるが詳細不明。最後の引数はどれだけフィルタを強く掛けるか。1以上の整数を指定する
-vf "ocv=dilate:3x3+0x0/rect|1"
- erode
収縮フィルタで色の境界を拡大する。設定を強めるほど線が太くなり細かい描写の堺がなくなる。設定内容は dilate と同じ
-vf "ocv=erode:3x3+0x0/rect|1"
- smooth
映像をスムーズ(のっぺり)させる。アルゴリズムは blur, blur_no_scale, median, gaussian, bilateral が使え、既定値は gaussian。blur, gaussian は映像がぼける。数字の引数が 4つあるが最初の 1つしか効果が無い。最初の引数は 1以上の正の奇数の整数を指定する
-vf "ocv=smooth:gaussian:3:0:0:0"