前提・実現したいこと
画像内で指定した領域に平均フィルタをかけて、フィルタをかける前の画像との誤差を画素ごとの画素値の差で求め、それが最大になる場合と最小になる場合の領域の位置と処理後の画像を求めようとしています。
誤差は処理前後の画像のrgb値の差の二乗を求め、それらの合計によって定義します。
発生している問題
誤差の計算の動作確認を行ったところ、動作が非常に重く作業が進行しません。
問題点や解決法をご教示いただけると幸いです。
該当のソースコード
python
1from PIL import Image 2import numpy as np 3import cv2 4import math 5 6 7def main(): 8 F = cv2.imread("gazou.jpg") 9 m, n, c = F.shape 10 h = 30 11 M = math.floor(m/h) 12 N = math.floor(n/h) 13 im = F[1:M*h, 1:N*h] 14 15 list = [] 16 for i in range(h): 17 for j in range(h): 18 D = im[i:(i+(M-1)*h-1), j:(j+(N-1)*h-1)] 19 P = cv2.blur(D, (h, h)) 20 List = [] 21 for x in range((M-1)*h-1): 22 for y in range((N-1)*h-1): 23 Db,Dg,Dr = D[x,y] 24 Pb,Pg,Pr = P[x,y] 25 DPr = pow(int(Dr)-int(Pr), 2) 26 DPg = pow(int(Dg)-int(Pg), 2) 27 DPb = pow(int(Db)-int(Pb), 2) 28 e = DPr+DPg+DPb 29 List.append(e) 30 E = sum(List) 31 print(E) 32 list.append(E) 33 34 Emax = max(list) 35 Emin = min(list) 36 print("max = ", Emax) 37 print("min = ", Emin) 38 39if __name__ == '__main__': 40 main()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。