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日

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)