我无法理解如何使用PIL将模糊滤镜应用于图像的一部分。 我试图用谷歌搜索并阅读PIL文档,但没有找到任何有用的东西。 谢谢你的帮助。
答案 0 :(得分:15)
您可以裁剪出图像的一部分,模糊并重新粘贴。像这样:
box = (30, 30, 110, 110)
ic = image.crop(box)
for i in range(10): # with the BLUR filter, you can blur a few times to get the effect you're seeking
ic = ic.filter(ImageFilter.BLUR)
image.paste(ic, box)
下面是我用来生成国际象棋棋盘,保存图像等的完整代码。(这不是生成棋盘等最有效的方法,它只是用于演示。)
import Image, ImageDraw, ImageFilter
from itertools import cycle
def draw_chessboard(n=8, pixel_width=200):
"Draw an n x n chessboard using PIL."
def sq_start(i):
"Return the x/y start coord of the square at column/row i."
return i * pixel_width / n
def square(i, j):
"Return the square corners, suitable for use in PIL drawings"
return map(sq_start, [i, j, i + 1, j + 1])
image = Image.new("L", (pixel_width, pixel_width))
draw_square = ImageDraw.Draw(image).rectangle
squares = (square(i, j)
for i_start, j in zip(cycle((0, 1)), range(n))
for i in range(i_start, n, 2))
for sq in squares:
draw_square(sq, fill='white')
image.save("chessboard-pil.png")
return image
image = draw_chessboard()
box = (30, 30, 110, 110)
ic = image.crop(box)
for i in range(10):
ic = ic.filter(ImageFilter.BLUR)
image.paste(ic, box)
image.save("blurred.png")
image.show()
if __name__ == "__main__":
draw_chessboard()
答案 1 :(得分:1)
我只是添加到@ tom10发布的上述答案中。
# importing PILLOW library.
from PIL import Image, ImageFilter
image = Image.open('path/to/image_file')
box = (30, 30, 110, 110)
crop_img = image.crop(box)
# Use GaussianBlur directly to blur the image 10 times.
blur_image = crop_img.filter(ImageFilter.GaussianBlur(radius=10))
image.paste(blur_image, box)
image.save('path/to/save_image_file')
我刚刚将 ImageFilter.Blur 替换为 ImageFilter.GaussianBlur(radius = 10) 。您可以通过更改半径值来更改模糊量。