グレイスケールと2値化(OpenCVのテスト; 続き)

画像を読み込んでコピーできるなら、 その読み込んだ画像オブジェクトを使って加工してみる。

まず、元のカラー画像をグレイスケール( gray scale )に変換して表示する。

import cv2

img = cv2.imread('img.png')
img_gray = cv2.cvtColor(img, cv2.BGR2GRAY)        # グレイスケールに変換する

cv2.imshow('img_grayscale', img_gray)        # 画像を表示する
cv2.waitKey()        # キー入力を待つ(待たせないと、表示した次の瞬間プログラムが終了する)

cvtColor()関数も、元のデータを変更するのではなく、グレイスケールにした画像オブジェクトを生成して返す。

しかし、定数はなんでこんな名前なのか。BGRって、RGBの逆? 定数なんだから、こうだと言われれば使うまでだが、変な感じ。

次に、グレイスケールにしたものを2値化する。 引数で2値の境界を指定する。

import cv2

img = cv2.imread('img.png')
img_gray = cv2.cvtColor(img, cv2.BGR2GRAY)        # グレイスケールに変換する
img_binary = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)        # グレイスケール画像を、2値化する

cv2.imshow('img_grayscale', img_gray)        # 画像を表示する
cv2.waitKey()        # キー入力を待つ(待たせないと、表示した次の瞬間プログラムが終了する)

2値化するにあたり閾値を指定できるのは便利。 画像によって、真ん中がちょうどいいとは限らない。 明るい方に寄っていたり、暗い方に寄っている場合は、調整が必要。

基本的な処理を落ち着いて見ると、ライブラリ設計者の気遣いが感じられて面白い。 とりあえず。