とあるメーカーエンジニアの趣味備忘録

Python, マイコンいじり, 日々の呟きなど

OpenCV 自分用メモ・覚え書き

RGB画素・グレースケール画素の定義

RGB画素、グレーススケール画素は共に色情報を8ビットで表現している。 すなわち、赤・緑・青・白黒の濃淡度合を28-1 = 256段階で分けており、0 - 255 の数値で指定する。

  • RGB画素
    RGB画素は画素値が大きいほど濃い色を表現する。
    例えば、(R, G, B) = (255, 0, 0) は最も濃い赤色を表し、(R, G, B) = (0, 255, 0) は最も濃い緑色を表す。
    よって、(R, G, B) = (255, 255, 255) は赤・青・緑の最も濃い度合を混色していることを意味し、黒色を表現することとなる。
    逆に、(R, G, B) = (0, 0, 0) は全色の最も薄い度合を混色することとなるため、白色を表現することとなる。

  • グレースケール画素

    f:id:makutsueeken5:20210811144143g:plain
    グレースケール画素の画素値と色の対応図

上に載せた写真(デジタル画像 - IGUNOSS,Inc.より引用)が示すように、グレースケール画素は画素値が大きいほど白に近く、画素値が小さいほど黒色に近い色を表現する。

ピクセル数に基づいた大きさで画像を表示したい場合

ウィンドウサイズの指定において、cv2.WINDOW_AUTOSIZE を指定すればよい

cv2.namedWindow("Original image", cv2.WINDOW_AUTOSIZE)
閾値処理 cv2.threshold の第4引数に指定するフラグについて

閾値処理を行う関数 cv2.threshold の引数は
第1引数は対象となる画像データ
第2引数は閾値(0~255)
第3引数は閾値以上のデータに割り当てる最大値
第4引数は閾値の判定処理方法を指定するフラグ
となっている。 第4引数の判定処理方法については、例えば・閾値以上のデータには最大値を割り当て、それ以外は0を割り当てる、や・閾値以上のデータには0を割り当て、閾値以下のデータに最大値を割り当てる、等の割り当て方を指定するということとなる。
具体的には、次のようなものが用意されている。

  • cv2.THRESH_BINARY
    閾値より大きいデータには最大値を割り当て、閾値以下のデータには0を割り当てる。
  • cv2.THRESH_BINARY_INV
    閾値より大きいデータには0を割り当て、閾値以下のデータに対しては最大値を割り当てる。
  • cv2.THRESH_TRUNC
    閾値より大きいデータは閾値を割り当て、閾値以下のデータはそのまま。
  • cv2.THRESH_TOZERO
    閾値より大きいデータはそのままの値で、閾値以下のデータには0を割り当てる。
  • cv2.THRESH_TOZERO_INV
    閾値より大きいデータには0を割り当てて、閾値以下のデータはそのまま。