Algorithms/Gaussian blur/モザイク
14103 ワード
▼オリジナル▼
▼LV.6▼
▼blur.py▼
from imageio import imread, imsave
from PIL import Image
import sys
def update_progress(progress):
print("\rProgress: [{0:50s}] {1:.1f}%".format('#' * int(progress * 50), progress*100), end="", flush=True)
def average(img, x, y, blurfactor):
# Each function itself return the each pixel's average rgb value.
# More blur factor is higher level of blur effect.
width = img.shape[1]
height = img.shape[0]
rtotal = gtotal = btotal = 0
for y2 in range(y - blurfactor, y + blurfactor+1):
for x2 in range(x - blurfactor, x + blurfactor+1):
if (y2 not in range(height)) or (x2 not in range(width)):
continue
else:
r, g, b = (int(img[y2,x2,0]), int(img[y2,x2,1]), int(img[y2,x2,2]))
(rtotal,gtotal,btotal) = (rtotal+r,gtotal+g,btotal+b)
(rAverage,gAverage,bAverage) = (rtotal//((blurfactor*2+1)**2)), (gtotal//((blurfactor*2+1)**2)), (btotal//((blurfactor*2+1)**2))
return (rAverage, gAverage, bAverage)
def blur(blurfactor):
# Default file name is 'cat.jpg'.
img = imread('cat.jpg')
width = img.shape[1]
height = img.shape[0]
img2 = Image.new("RGB", (width, height), (0,0,0))
for y in range(height):
for x in range(width):
r, g, b = average(img, x, y, blurfactor)
img2.putpixel((x,y), (r,g,b))
progress = (y)/(height-blurfactor)
update_progress(progress)
update_progress(1)
img2.save('blur.jpg')
img2.show()
def main():
blur(int(sys.argv[1]))
if __name__ == '__main__':
main()
端末では[blurfactor]
の代わりに数字で運転すればよい.数字が高ければ高いほど、時間が長くなります.
同じパスに
cat.jpg
というファイルが必要で、プログラムが戻った後、blur.jpg
として再保存されます.▼使い方▼
python blur.py [blurfactor]
▼LV.6例▼python blur.py 6
最初にblurfactor
の整数を入力します.入力を受ける理由は、写真の全画素間を循環して周囲の画素の平均色を求め、現在の画素に入れるため、blurfactor
という変数が周囲の範囲を探索する尺度として用いられるからである.blur
関数では、各画素が順次繰り返し文によってaverage
関数を実行し、この関数はblurfactor
の範囲内で平均色値を求める役割を果たす.average
関数は、現在の画素を基準として、上下blurfactor
の範囲を含む正方形内の全画素の平均色を求める.Reference
この問題について(Algorithms/Gaussian blur/モザイク), 我々は、より多くの情報をここで見つけました https://velog.io/@kon6443/Algorithms-Gaussian-blur-모자이크テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol