困っていること
pythonで画像処理100本ノックという画像処理を手動で実装する問題に取り組んでいます。
その途中でfor文を使用する機会があったのですが、どうしてもfor文が正しく回ってないような気がします。
他のサイトのfor分の使い方等見てみても合っているとは思うのですが、、、
w及びhの値が128で、cの値が3なので126×126×3回処理を実行してくれるはずではあるのですが、出力を見てみると6回で終わってしまっている気がします。
ソースコード
medianFilter.py
1import numpy as np 2import cv2 3import matplotlib.pyplot as plt 4 5 6def medianFilter(img, k): 7 dst = img.copy() 8 9 w,h,c = dst.shape 10 11 size = k // 2 12 print(size) 13 14 for x in range(1,w-2): 15 for y in range(1,h-2): 16 for c in range(c): 17 print(x,y,c) 18 # dst[x,y,c] = np.median(dst[x-size:x+k-size, y-size:y+k-size, c]) 19 20 return dst 21 22 23# 画像読込 24img = cv2.imread('../assets/imori_noise.jpg') 25 26# メディアンフィルタ 27img = medianFilter(img, 3) 28 29# 画像表示 30plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) 31plt.show()
出力結果
1 1 0 1 1 1 1 1 2 1 2 0 1 2 1 1 3 0
w, h, cの値が本当にそうなっているか直前でprint等で確認されてはいかがでしょうか
また、
for c in range(c):
はcを使いまわしているので危険かも別の変数名がベターかと思います
補足
wが128だとすると
range(1,w-2)
は1から126-1まで(rangeの2項目-1までなので)なので125回ですね
たとえばrange(w-2)とすると0から126-1までなので126回となります。
125回なのですね、ありがとうございます!!
また、変数名を今しがた変更してみたところ125×125×3回動作し、処理も上手くいきました。
丁寧な解説どうもありがとうございます!!
回答1件
あなたの回答
tips
プレビュー