Python 初心者です。
2つの同じサイズの単色画像を受け取り、二乗平均誤差を返す関数を作ろうとしています。
Python
1from PIL import Image 2import numpy as np 3from gaussian_noise import add_gaussian_noise 4import matplotlib.pyplot as plt 5 6# 元となる画像の読み込み 7im = Image.open("../images/lena-gray.png") 8plt.show(im) 9 10# オリジナル画像の幅と高さを取得 11width, height = im.size 12#print(im.shape) 13 14# オリジナル画像に平均値0、標準偏差10の画像を生成する 15#im2 = Image.new(add_gaussian_noise(im, 0, 10), (width, height)) 16im2 = add_gaussian_noise(im, 0, 10) 17 18def mse(im, im2): 19 im = np.array(im, dtype=np.int) 20 im2 = np.array(im2, dtype=np.int) 21 mse = np.mean((im-im2)**2) 22 return mse 23 24print(mse)
なお、add_gaussian_noiseについては、
Python
1import numpy as np 2 3def add_gaussian_noise(src, mean=0, sigma = 10): 4 noise = np.random.normal(mean, sigma, src.shape) 5 dst = np.clip(src + noise, 0., 255.) 6 return dst.astype(src.dtype)
です。
実行すると、
File "D:\WPy64-3760\notebooks\chap3\gaussian_noise.py", line 4, in add_gaussian_noise
noise = np.random.normal(mean, sigma, src.shape)
AttributeError: 'PngImageFile' object has no attribute 'shape'
と出てきてしまうのですが、
PNGにshapeが無いといわれてもピンときません。
画像ファイルは存在している筈(存在はしている)なのですが…
お力添え、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/03 05:09
2020/03/03 05:14 編集
2020/03/03 06:17