前提・実現したいこと
入力された画像を分割し、いろいろな処理をした後に分割された画像を結合し元に戻す、
というプログラムを作っています。
発生している問題
しかし、入力された画像と、結合し出力された画像では色味が異なり、正しく処理できていない状態にあります。
思い当たる節として、入力データをテンソルに変換→正規化→(処理)→正規化を解く
このどれかの処理がうまくいっていないものとみています(プログラムでは27, 29, 37行目)。
どの行の処理がうまくできていないのかわかる方がいらっしゃいましたら、ご教授いただけないでしょうか。
宜しくお願い致します。
該当のソースコード
python
1import numpy as np 2import cv2 3import tensorflow as tf 4 5def main(): 6 i = 0 7 n = 10 8 pro_height = 3000 9 pro_width = 4000 10 hd_height = 2160 11 hd_width = 3480 12 stock_img = [] 13 d = [] 14 y0 = int(pro_height/n) 15 x0 = int(pro_width/n) 16 17 img = cv2.imread('./image/image.png') 18 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 19 lr_h, lr_w = img.shape[0], img.shape[1] 20 21 # 画像分割 22 if lr_h < lr_w: 23 r_img = cv2.resize(img, (pro_width, pro_height)) 24 a = [r_img[y0*y:y0*(y+1), x0*x:x0*(x+1)] for y in range(n) for x in range(n)] 25 26 # ===怪しいところ(27, 29, 37行目)=== 27 b = tf.convert_to_tensor(a, np.float32) 28 # 正規化 29 c = (b.numpy() - 127.5) / 127.5 30 31 # ================= 32 # ===その他の処理=== 33 # ================= 34 35 # 正規化を解く 36 d = np.clip((c) * 255, 0, 255).astype(np.uint8) 37 # ================ 38 39 40 # 画像結合 41 for _ in range(n): 42 img = [d[x+i] for x in range(n)] 43 img_x = cv2.hconcat(img) 44 stock_img.append(img_x) 45 i += n 46 47 image = cv2.vconcat(stock_img) 48 image = cv2.resize(image, (hd_width, hd_height)) 49 cv2.imwrite('./result_{0}.png'.format(n), image) 50 51if __name__ == '__main__': 52 main()
試したこと
18行目のimg = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)を変更してみたり、29, 36行目の値を変更してみたり、いろいろ試しましたが、うまくいきませんでした。
###改善(jbpd0さん)
コメントしていただきありがとうございます。
指摘箇所を変更し実行した結果を下記に示します。
回答1件
あなたの回答
tips
プレビュー