OpenCV threshold の使い方
はじめに
OpenCV のthreshold を使った二値化処理ついて調べたことをまとめた。
adaptiveThreshold については別で。
とりあえず関数を試してみたい方
実験用プログラム OpenCV_test の GitHubリポジトリ
URL
https://github.com/iryachi/OpenCV_test
実行ファイルだけ
https://github.com/iryachi/OpenCV_test/releases
使い方
https://iryachi.stars.ne.jp/opencv_test_imple/
threshold 関数について
double cv::threshold( InputArray src, OutputArray dst, double thresh, double maxval, int type );
引数
src | InputArray | 入力画像 | グレースケールの画像 ・1チャンネル, 8bit整数 ・1チャンネル, 32bit浮動小数点 |
dst | OutputArray | 出力画像 | 二値化処理後の画像 入力画像と同じフォーマット |
thresh | double | 閾値 | 8bit 整数 : 0 – 255 (UINT8_MAX) 32bit 浮動小数点 : FLT_MIN – FLT_MAX |
maxval | double | 閾値を超えたピクセルに代入する値 | 8bit整数 の場合は 0 – 255 (UINT8_MAX) 32bit 浮動小数点 : FLT_MIN – FLT_MAX THRESH_BINARY, THRESH_BINARY_INV の時に利用 |
type | int | 二値化のパラメータ | 後述 |
返り値 double
THRESH_OTSU、THRESH_TRIANGLE を使った時に算出された閾値。
二値化のパラメータ type について
THRESH_BINARY | 閾値を超えるピクセルは maxVal 、それ以外のピクセルは 0。 |
THRESH_BINARY_INV | 閾値を超えるピクセルは 0 、それ以外のピクセルは maxVal。 |
THRESH_TRUNC | 閾値を超えるピクセルは threshold に、それ以外のピクセルは変更なし。 |
THRESH_TOZERO | 閾値を超えるピクセルは変更なし、それ以外のピクセルは 0 。 |
THRESH_TOZERO_INV | 閾値を超えるピクセルは 0、それ以外のピクセルは変更なし。 |
THRESH_MASK | 設定不可。 |
THRESH_OTSU | 大津の方法を用いて自動で閾値を設定。 閾値を超えるピクセルは maxVal。それ以外のピクセルは 0。 8bit画像にしか使えない。 |
THRESH_TRIANGLE | トライアングル法を用いて自動で閾値を設定。 閾値を超えるピクセルは maxVal。それ以外のピクセルは 0。8bit画像にしか使えない。 |
パラメータの違いによる処理結果例
おわりに
二値化のパラメータ設定は結構難しい。輝度の変化とかですぐに結果が変わってしまう。 THRESH_OTSU で行けるなら OTSU でやったほうが安定すると思う。
ディスカッション
コメント一覧
まだ、コメントがありません