第12回 課題解答

元画像の例

課題1 : 色相の変更

import cv2

# Hueをdh増やした画像を返す関数
def increase_hue(image, dh):
  hsvimage = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  hsvimage[:, :, 0] = (hsvimage[:, :, 0] + dh) % 180
  return cv2.cvtColor(hsvimage, cv2.COLOR_HSV2BGR)

# 画像の読み込み
image = cv2.imread('source.jpg')

# Hueを30, 60, 90, 120, 150増やした画像を生成
for dh in range(30, 180, 30):
  result = increase_hue(image, dh)
  cv2.imwrite('1_' + str(dh) + '.jpg', result)
元画像
1_30
1_60
1_90
1_120
1_150

課題2 : 彩度の変更

import cv2
import numpy as np
 
# Saturationをds変えた画像を返す関数
def change_saturation(image, ds):
  hsvimage = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  # float32型に変換
  hsvf = hsvimage.astype(np.float32)
  # 変換
  hsvf[:, :, 1] = np.clip(hsvf[:, :, 1] + ds, 0, 255)
  # uint8型に戻す
  hsvimage = hsvf.astype(np.uint8)
  return cv2.cvtColor(hsvimage, cv2.COLOR_HSV2BGR)


# 画像の読み込み
image = cv2.imread('source.jpg')

# Saturationを100増やした画像を作成
image_100 = change_saturation(image, 100)
# Saturationを100減らした画像を作成
image_100_ = change_saturation(image, -100)

# 画像を保存
cv2.imwrite('2_100.jpg', image_100)
cv2.imwrite('2_-100.jpg', image_100_)
元画像
2_100
2_-100

課題3 : 明度の変更

import cv2
import numpy as np

# Valueをdv変えた画像を返す関数
def change_value(image, dv):
  hsvimage = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  # float32型に変換
  hsvf = hsvimage.astype(np.float32)
  # 変換
  hsvf[:, :, 2] = np.clip(hsvf[:, :, 2] + dv, 0, 255)
  # uint8型に戻す
  hsvimage = hsvf.astype(np.uint8)
  return cv2.cvtColor(hsvimage, cv2.COLOR_HSV2BGR)


# 画像の読み込み
image = cv2.imread('source.jpg')

# Valueを100増やした画像を作成
image1 = change_value(image, 100)
# Valueを100減らした画像を作成
image2 = change_value(image, -100)

# 画像を保存
cv2.imwrite('3_100.jpg', image1)
cv2.imwrite('3_-100.jpg', image2)
元画像
3_100
3_-100