ffmpeg でエッジマスク


ffmpeg でエッジ検出するフィルタに edgedetectconvolutionsobel, prewitt などがある。これらのフィルタを使ってエッジ領域を拡大しグレースケールのマスクとすることでエッジ部分に特定のフィルタを当てないようにすることができる。

コマンド例

3.2 バージョンで追加予定の sobel フィルタが一番エッジ部分が太く調整しやすいのでこのフィルタを使う。エッジ部分に識別子[1]の lutyuv を当てないようにマスクするコマンド例。適宜この部分にエッジ保護したいフィルタを当てる。以下のコマンド例だとエッジ部分の色が他と違うのが分かる。gt(val\,50) の50 の値を上げるほどエッジの線が少なくなる。

ffmpeg -i input -vf format=yuvj420p,split=3[0][1][2];[0]sobel=1,lutyuv=255-gt(val\,50)*255:128:128[0a];[1]lutyuv=255:0:0[1a];[1a][0a]alphamerge[10];[2][10]overlay output
ffplay -i input -vf format=yuvj420p,split=3[0][1][2];[0]sobel=1,lutyuv=255-gt(val\,50)*255:128:128[0a];[1]lutyuv=255:0:0[1a];[1a][0a]alphamerge[10];[2][10]overlay

関連記事

追記
大幅に書き直した。2016年10月9日

コメントを残す

メールアドレスが公開されることはありません。