ffmpeg でエッジ検出するフィルタにedgedetect
とconvolution
、sobel, 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
関連記事
- 映像の上に映像をのせる overlay
- 各映像チャンネルを結合する mergeplanes
- 鮮鋭化やぼかし、エンボス処理などができる convolution
- ffmpeg でエッジ検出をする edgedetect
- エッジ検出フィルタ sobel, prewitt
- エッジ検出フィルタ roberts
追記
大幅に書き直した。2016年10月9日