Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

画像の彩度、明度を変える

opencvのimreadで読み込んだ画像はBGR(青緑赤)の3チャンネルからなるndarrayなので、これを色空間変換により色相(Hue)、彩度(Saturation)、明度(Value)からなるHSV色空間に変換し、彩度と明度を調整します。

関連記事

ルックアップテーブルによる画像コントラストの補正
特定の色を別の色に変換する(赤い服を緑の服に変える)
PillowのImageEnhanceで画像の鮮やかさを変える
PillowのImageEnhanceで画像のブライトネス(明るさ)を変える
ルックアップテーブルで画像の彩度、明度を調整する(画像を明るく鮮やかにする)

使った関数・メソッド
  • cv2.imread() : 画像ファイルの読み出し
  • cv2.cvtColor() : 画像の色空間変換
  • cv2.threshold() : 画像の二値化
  • np.where() : 条件を満たすndarrayの要素の置換
  • cv2.imwrite() : 画像を保存する
環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • OpenCV 4.0.0
準備

画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、ファイル名'rose.jpg'でjupyter notebookファイル(***.ipynb)と同じディレクトリに保存しました。

rose.jpg

コード

彩度Sを0.7倍にした場合

import cv2  # OpenCVのインポート

img = cv2.imread('rose.jpg')  # 画像の読み出し
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)  # 色空間をBGRからHSVに変換
s_magnification = 0.7  # 彩度(Saturation)の倍率
v_magnification = 1  # 明度(Value)の倍率

img_hsv[:,:,(1)] = img_hsv[:,:,(1)]*s_magnification  # 彩度の計算
img_hsv[:,:,(2)] = img_hsv[:,:,(2)]*v_magnification  # 明度の計算
img_bgr = cv2.cvtColor(img_hsv,cv2.COLOR_HSV2BGR)  # 色空間をHSVからBGRに変換

cv2.imwrite('rose_contrast.jpg',img_bgr)  # 画像の保存
実行結果


コード

彩度Sを0.5倍にした場合

import cv2  # OpenCVのインポート

img = cv2.imread('rose.jpg')  # 画像の読み出し
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)  # 色空間をBGRからHSVに変換
s_magnification = 0.5  # 彩度(Saturation)の倍率
v_magnification = 1  # 明度(Value)の倍率

img_hsv[:,:,(1)] = img_hsv[:,:,(1)]*s_magnification  # 彩度の計算
img_hsv[:,:,(2)] = img_hsv[:,:,(2)]*v_magnification  # 明度の計算
img_bgr = cv2.cvtColor(img_hsv,cv2.COLOR_HSV2BGR)  # 色空間をHSVからBGRに変換

cv2.imwrite('rose_contrast.jpg',img_bgr)  # 画像の保存
実行結果


コード

明度Vを0.7倍にした場合

import cv2  # OpenCVのインポート

img = cv2.imread('rose.jpg')  # 画像の読み出し
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)  # 色空間をBGRからHSVに変換
s_magnification = 1  # 彩度(Saturation)の倍率
v_magnification = 0.7  # 明度(Value)の倍率

img_hsv[:,:,(1)] = img_hsv[:,:,(1)]*s_magnification  # 彩度の計算
img_hsv[:,:,(2)] = img_hsv[:,:,(2)]*v_magnification  # 明度の計算
img_bgr = cv2.cvtColor(img_hsv,cv2.COLOR_HSV2BGR)  # 色空間をHSVからBGRに変換

cv2.imwrite('rose_contrast.jpg',img_bgr)  # 画像の保存  
実行結果


コード

明度Vを0.5倍にした場合

import cv2  # OpenCVのインポート

img = cv2.imread('rose.jpg')  # 画像の読み出し
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)  # 色空間をBGRからHSVに変換
s_magnification = 1  # 彩度(Saturation)の倍率
v_magnification = 0.5  # 明度(Value)の倍率

img_hsv[:,:,(1)] = img_hsv[:,:,(1)]*s_magnification  # 彩度の計算
img_hsv[:,:,(2)] = img_hsv[:,:,(2)]*v_magnification  # 明度の計算
img_bgr = cv2.cvtColor(img_hsv,cv2.COLOR_HSV2BGR)  # 色空間をHSVからBGRに変換

cv2.imwrite('rose_contrast.jpg',img_bgr)  # 画像の保存  
実行結果

以下のサイトを参考にさせていただきました

OpenCV-Python Tutorials >> 色空間の変換
Wikipedia >> HSV色空間
Pythonの文法メモ > 【OpenCV】cvtColorによるBGRからグレースケール, HSVへの色空間変換

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村