あいどる💖たいむ

あいどるやってます。

OpenCVを使って彩度を変更する

OpenCVを使って彩度の変更をしてみる。

環境 

>>> import cv2
>>> cv2.__version__
'3.2.0'

実装

大まかな流れ

  1. cv2.imreadで画像読み込み
  2. 彩度をあつかうので、RGBからHSVへ変換(OpenCVで読み込んだ配列はBGRの並び)
  3. 各ピクセルの彩度(index:1)を変更する。ここでは0.3倍
  4. HSVからRGBに戻し、保存と表示

ちなみに、HSVの値の範囲は、

For HSV, Hue range is [0,179], Saturation range is [0,255] and Value range is [0,255].

とのこと。

OpenCV: Changing Colorspaces

コード

import cv2
import numpy as np

img = cv2.imread('images/pexels-photo-297743.jpeg', cv2.IMREAD_COLOR)
dst = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # BGRからHSVへ変換

print(dst.shape)

for i in range(dst.shape[0]):
    for j in range(dst.shape[1]):
        # Vの値を上書きする
        dst[i, j, 1] = int(dst[i, j, 1] * 0.3)

img = cv2.cvtColor(dst, cv2.COLOR_HSV2BGR)  # HSVからBGRに戻す
cv2.imshow('res', img)
cv2.imwrite('images/result.jpg', img)
cv2.waitKey(0)

実行結果

左が元画像、右が変換後の画像。 彩度が下がっていることは明らか。

f:id:shiccocsan:20170622161554j:plain

おわりに

彩度の変更は、numpy配列の演算で1ピクセルごとでなく一括で変更できるのではないかと思う。

参考

HSV色空間 - Wikipedia

OpenCV: OpenCV modules