ガンマ補正に最適な値を設定する方法というサイトのプログラムを触っているのですが、
明るい画像の場合は、グレーまたは値の画像を反転し、暗い画像の場合と同様に処理してから、もう一度反転して、値の画像を使用している場合は再結合します。
とありました。
そのまんまなのですが、明るい画像の場合の値の画像を反転し、暗い画像の場合と同様に処理してから、もう一度反転して、値の画像を使用している場合は再結合する方法がわかりません。
今は再結合の方法がわかりません。
どなたか教えてください。お願い致します。
pyrhon
1import cv2 2import numpy as np 3import math 4 5# read image 6img = cv2.imread('lioncuddle1.jpg') 7 8 9# METHOD 2: HSV (or other color spaces) 10 11# convert img to HSV 12hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 13hue, sat, val = cv2.split(hsv) 14 15# compute gamma = log(mid*255)/log(mean) 16mid = 0.5 17mean = np.mean(val) 18gamma = math.log(mid*255)/math.log(mean) 19print(gamma) 20 21# do gamma correction on value channel 22val_gamma = np.power(val, gamma).clip(0,255).astype(np.uint8) 23 24# combine new value channel with original hue and sat channels 25hsv_gamma = cv2.merge([hue, sat, val_gamma]) 26img_gamma2 = cv2.cvtColor(hsv_gamma, cv2.COLOR_HSV2BGR) 27 28# show results 29cv2.imshow('input', img) 30cv2.imshow('result1', img_gamma1) 31cv2.imshow('result2', img_gamma2) 32cv2.waitKey(0) 33cv2.destroyAllWindows() 34 35# save results 36cv2.imwrite('lioncuddle1_gamma2.jpg', img_gamma2)
追記
プログラムを間違えており、サイトに載っているプログラムをそのまんま使用したらできたのですが、
暗い画像の場合と同様に処理してから、もう一度反転して、値の画像を使用している場合は再結合します。
とあるのですが、暗い画像と同様に処理した後、もう一度反転しました。
しかし、どこでどうやって再結合すればいいのかわかりません。
python
1 #色の反転 2 img = cv2.bitwise_not(img) 3 4 # imgをHSVに変換 5 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 6 hue, sat, val = cv2.split(hsv) 7 8 # gammaの計算 = log(mid*255)/log(mean) 9 mid = 0.5 10 mean = np.mean(val) 11 gamma = math.log(mid*255)/math.log(mean) 12 print(gamma) 13 14 #明度チャンネルにガンマ補正を行う 15 val_gamma = np.power(val, gamma).clip(0,255).astype(np.uint8) 16 17 18 #新しい明度チャンネルを元の色相と彩度チャンネルに合成します 19 hsv_gamma = cv2.merge([hue, sat, val_gamma]) 20 img_gamma2 = cv2.cvtColor(hsv_gamma, cv2.COLOR_HSV2BGR) 21 22 #色の反転 23 img_gamma2 = cv2.bitwise_not(img_gamma2) 24 25 26 #書き込み 27 cv2.imwrite(sys.argv[2],img_gamma2)