第14回 課題解答

元画像の例

課題1 : リサイズ

import cv2
 
# 2枚の画像を読み込む
image = []
image.append(cv2.imread('source1.jpg'))
image.append(cv2.imread('source2.jpg'))
 
# 長辺が800ピクセルになるようにリサイズ
for i in range(len(image)):
  height, width = image[i].shape[:2]
  if height > width:
    image[i] = cv2.resize(image[i], (int(width * 800 / height), 800))
  else:
    image[i] = cv2.resize(image[i], (800, int(height * 800 / width)))
  cv2.imwrite('1_' + str(i + 1) + '.jpg', image[i])
実行結果

課題2 :

import cv2
 
image = cv2.imread("1_1.jpg")
 
# 画像のサイズを取得
height, width = image.shape[:2]
 
# フレームレート
fps = 30
 
# image writerを用意する
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('2.mp4', fourcc, fps, (width, height))
 
# Hueを0~179ずらしながらフレームを書き込む
for i in range(180):
  hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  hsv[:, :, 0] = (hsv[:, :, 0] + i) % 180
  bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
  out.write(bgr)
 
out.release()
実行例

課題3 :

import cv2
import numpy as np
 
image = cv2.imread("1_1.jpg")
 
# 画像のサイズを取得
height, width = image.shape[:2]
 
# フレームレート
fps = 60
 
# image writerを用意する
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('3.mp4', fourcc, fps, (width, height))
 
# Saturationを-255~255ずらしながらフレームを書き込む
for i in range(-255, 256):
  hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  # float32型に変換
  hsv = hsv.astype(np.float32)
  hsv[:, :, 1] = np.clip(hsv[:, :, 1] + i, 0, 255)
  # uint8型に戻す
  hsv = hsv.astype(np.uint8)
  bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
  out.write(bgr)
 
out.release()
実行例

課題4 :

import cv2
import numpy as np
 
image = cv2.imread("1_1.jpg")
 
# 画像のサイズを取得
height, width = image.shape[:2]
 
# フレームレート
fps = 60
 
# image writerを用意する
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('4.mp4', fourcc, fps, (width, height))
 
# Valueを-255~255ずらしながらフレームを書き込む
for i in range(-255, 256):
  hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  # float32型に変換
  hsv = hsv.astype(np.float32)
  hsv[:, :, 2] = np.clip(hsv[:, :, 2] + i, 0, 255)
  # uint8型に戻す
  hsv = hsv.astype(np.uint8)
  bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
  out.write(bgr)
 
out.release()
実行例

課題5 :

import cv2
import numpy as np
 
# 2枚の画像を読み込む
image = []
image.append(cv2.imread('1_1.jpg'))
image.append(cv2.imread('1_2.jpg'))
 
# 画像のサイズを取得
height, width = image[0].shape[:2]
 
# フレームレート
fps = 30
 
# image writerを用意する
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('5.mp4', fourcc, fps, (width, height))
 
# 総フレーム数270で、アルファ値を0~1になるように変えながらimage[0]とimage[1]を合成した画像を書き込む
for i in range(270):
  alpha = i / 270
  beta = 1 - alpha
  dst = cv2.addWeighted(image[0], alpha, image[1], beta, 0)
  out.write(dst)
 
out.release()
実行例