はじめに
色を表現する際、RGBではなくHSVを使って表現することがあり、その際、値の範囲をグラデーションで表現したかったので、コードを書いてみました。何かの役に立てば幸いです。
やったこと
画像のサイズ(width,height)と、HSVの範囲(lower_hsv、upper_hsv)を指定することで、その範囲をグラデーションで表現することができます。
import cv2
import numpy as np
# 画像のサイズ
width = 255
height = 255
# HSVの範囲を設定
lower_hsv = [0,0,0]
upper_hsv = [180,255,255]
# 初期化
hsv=np.zeros((height,width,3),np.uint8)
# 画像のサイズに合わせて値を分割
h_range = np.linspace(lower_hsv[0],upper_hsv[0],width)
s_range = np.linspace(lower_hsv[1],upper_hsv[1],height)
v_range = np.linspace(lower_hsv[2],upper_hsv[2],height)
# 横軸を色相(H)
for i in range(width):
# 縦軸を彩度(S),明度(V)
for j in range(height):
hsv[j,i,0]=h_range[i]
hsv[j,i,1]=s_range[j]
hsv[j,i,2]=v_range[j]
# ファイルに出力
img=cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
cv2.imwrite('HSV_image.jpg',img)
このまま実行した場合
彩度を固定で緑のグラデーションを作りたい場合
lower_hsv = [50,200,0]
upper_hsv = [80,200,255]
明度を固定で青のグラデーションを作りたい場合
lower_hsv = [100,0,100]
upper_hsv = [130,255,100]