グレイスケールと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値化するにあたり閾値を指定できるのは便利。 画像によって、真ん中がちょうどいいとは限らない。 明るい方に寄っていたり、暗い方に寄っている場合は、調整が必要。
基本的な処理を落ち着いて見ると、ライブラリ設計者の気遣いが感じられて面白い。 とりあえず。