kerasで画像生成モデル(pix2pix)を実装しようと試みている初学者です。
学習済みのgenerator_modelに複数のテスト画像(rawImage)を入力し、
出力画像を表示・保存したいと考えています。。
そのさい下記のようにOpenCVを記述するとエラーが発生してしまいました。
python
1generator_model_output = generator_model.predict(rawImage, batch_size=1, verbose=0) 2 3for i in range(10): 4 gen = generator_model_output[i] 5 im = cv2.imread(gen) 6 cv2.imwright(str(i)+'.png',im) 7
cv2.imread(変数)が良くないのでしょうか?
抽象的な質問で申し訳ありませんが、どなたか解決方法を教えて頂けますと大変ありがたいです。
よろしくお願いします。
発生している問題・エラーメッセージ
TypeError Traceback (most recent call last) <ipython-input-5-fbd55f77ab7c> in <module> ----> 1 test() <ipython-input-4-7bb5c078b31f> in test() 20 for i in range(10): 21 gen = generator_model_output[i] ---> 22 im = cv2.imread(gen) 23 cv2.imwright(str(i)+'.png',im) TypeError: bad argument type for built-in operation
該当のソースコード
Python
1def test(): 2 rawImage, procImage, rawImage_val, procImage_val = load_data(datasetpath) 3 img_shape = rawImage.shape[-3:] 4 patch_num = (img_shape[0] // patch_size) * (img_shape[1] // patch_size) 5 disc_img_shape = (patch_size, patch_size, procImage.shape[-1]) 6 7 filters_num = 64 8 axis_num = -1 9 channels_num = img_shape[-1] 10 min_s = min(img_shape[:-1]) 11 12 13 generator_model = load_generator(img_shape,disc_img_shape) 14 generator_model.load_weights('generator.h5', by_name=True) 15 16 generator_model_output = generator_model.predict(rawImage, batch_size=1, verbose=0) 17 18 for i in range(10): 19 gen = generator_model_output[i] 20 im = cv2.imread(gen) 21 cv2.imwright(str(i)+'.png',im) 22 23test()
試したこと
下記のようにmatplotlibを使用すると一応画像は保存されるのですが、
画像というよりグラフを扱っている感じがして、あまりすっきりしません。。
python
1 for i in range(10): 2 gen = generator_model_output[i] 3 plt.tick_params(labelbottom=False,labelleft=False,labelright=False,labeltop=False) 4 plt.tick_params(bottom=False,left=False,right=False,top=False) 5 plt.imshow(gen,cmap='gray') 6 plt.savefig(str(i)+'.png',cmap='gray',bbox_inches='tight',pad_inches=0.0) 7 plt.show()
imreadは必要ですか。
https://docs.opencv.org/trunk/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56
その下の
imwrightはimwriteのことでしょうか。
ご指摘ありがとうございます!おっしゃる通りです。
そこで、for 以下を下記のように修正したところ、真っ黒の画像が10枚出力されました。
画像サイズは256×256で希望通りなのですが...(泣)
for i in range(10):
gen = generator_model_output[i]
cv2.imwrite(str(i)+'.png',gen)
1T2R3M4さん、本当にありがとうございました。
下記のように直したところ、それっぽい画像が得られました!
for i in range(10):
gen = generator_model_output[i]
gen = gen*255
gen = gen.astype('uint8')
cv2.imwrite(str(i)+'.png',gen)
なぜこのように直さないといけないのか、まだはっきり理解していないのですが(笑)
ぜひ今後ともご指導の程宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー