OpenCV で行列を使い色を変える

OpenCV では、行列を使い色の重みを調節できる。下記コードでは、行列 rc を使って画像を調整している。rc の数値の重みは、1行目:青→青、青→緑、青→赤、2行目:緑→青、緑→緑、緑→赤、3行目:赤→青、赤→緑、赤→赤 を意味する。

import cv2
import sys
import numpy as np

# 画像を加工する
def mkimg(img):
    rc = [[1.2, 0. , 0. ],
          [0.1, 1.2, 0. ],
          [0.1, 0. , 1.2]]
    img2 = bgrtune(img,rc)
    
    return img2

# 行列でBGRを編集する
def bgrtune(img,rc):
    img2 = np.dot(np.float32(img) , rc)
    return ct(img2)

# 値を0-255にclipして、typeをuint8にする                                                 
def ct(img):
    return np.clip(img,0,255).astype(np.uint8)

file_name = sys.argv[1]
img = cv2.imread(file_name)
img2 = mkimg(img)

cv2.imwrite(file_name.replace(".",".out."),img2)

今回、曇の日に撮った写真を明るくするために、各色を 1.2 倍し、青成分の強くするために緑→青、赤→青を各 0.1 だけ混ぜた。

元画像:横浜の臨港パーク
編集画像:各色を 1.2 倍、緑→青、赤→青を 各 0.1 加えた

コメント

タイトルとURLをコピーしました