画像を2値化するには、Imgproc.threshold()メソッドを使用します。
Imgproc.threshold(Mat src, Mat dst, double thresh, double maxval, int type)
Mat src 処理したい元画像のMat
Mat dst 変換後Mat
double thresh 閾値
double maxval 最大値
int type 閾値処理の種類
typeについてはImgprocに以下定数が用意されています。
THRESH_BINARY 閾値以下の値は0に,それ以外はmaxValに
THRESH_BINARY_INV 閾値より大きい値は0に,それ以外はmaxValに
THRESH_TRUNC 閾値より大きい値は閾値に,それ以外はそのままに
THRESH_TOZERO 閾値より大きい値はそのままに,それ以外は0に
THRESH_TOZERO_INV 閾値以下の値はそのままに,それ以外は0に
また、特殊な値として「THRESH_OTSU」というものもあります。
上記と組み合わせて使用し、その場合Otsuアルゴリズムとやらを使って最適な閾値を決定するため、threshは無効となります。
8bit画像にのみ有効なようです。
それでは実際にやってみましょう。
Imgproc.threshold(mat, mat, 100.0, 255.0, Imgproc.THRESH_BINARY);
∑(゚Д゚;)エーッ
ぜんぜん2値じゃないw
ということで、グレースケールに変換してから2値化してみます。
きっとそういうことです。
THRESH_OTSUを使って閾値を自動にします。
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU);
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_BINARY_INV | Imgproc.THRESH_OTSU);
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_TRUNC | Imgproc.THRESH_OTSU);
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_TOZERO | Imgproc.THRESH_OTSU);
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_TOZERO_INV | Imgproc.THRESH_OTSU);
イソギンのワサワサ感が2値化された後でもたまらないですねぇ。
0 コメント:
コメントを投稿