gpt4 book ai didi

python - 使用Python在图像中创建 "spotlight"

转载 作者:行者123 更新时间:2023-12-01 04:21:41 31 4
gpt4 key购买 nike

这就是我正在尝试做的事情:

我有一张图片。

我想在图像中获取一个圆形区域,并使其正常显示。

图像的其余部分应该显得更暗。

这样,圆形区域就像“突出显示”一样。

我非常感谢有关如何在 Python 中执行此操作的反馈。

在 Gimp 中,我会手动创建一个灰色(小于中灰色)的新图层。然后我会在该层上创建一个圆形区域,并将其设置为中灰色。然后我会将混合模式更改为柔光。本质上,顶层的任何中间灰色的内容都将不加修改地显示,而任何比中间灰色更深的内容都会显示得更暗。

(理想情况下,我还会模糊顶层,以便过渡不会突然)。

如何在 Python 中通过算法来完成此操作?我考虑过使用 Pillow 库,但它没有这些类型的混合模式。我也考虑过使用 Blit 库,但我无法导入(不确定它是否还被维护)。我也对 scikit-image 持开放态度。我只需要有关库和一些相关函数的指针。

如果没有合适的库,我愿意从 Python 代码中调用命令行工具(例如 imagemagick)。

谢谢!

最佳答案

您还可以使用 Python 图像库来完成此操作。这是一种可行的方法,但可能会被优化,因为其中仍然有一个双 for 循环。

from PIL import Image
import math

def spotlight(img: Image, center: (int, int), radius: int) -> Image:
width, height = img.size
overlay_color = (0, 0, 0, 128)
img_overlay = Image.new(size=img.size, color=overlay_color, mode='RGBA')
for x in range(width):
for y in range(height):
dx = x - center[0]
dy = y - center[1]
distance = math.sqrt(dx * dx + dy * dy)
if distance < radius:
img_overlay.putpixel((x, y), (0, 0, 0, 0))
img.paste(img_overlay, None, mask=img_overlay)
return img


if __name__ == '__main__':
orig_file_name = 'amsterdam_1900x1500'
img = Image.open('{}.jpg'.format(orig_file_name))
spotlight_img = spotlight(img, (475, 900), 400)
spotlight_img.save('spotlight_{}.jpg'.format(orig_file_name))

之前: amsterdam_1900x1500.jpg

之后: spotlight_amsterdam_1900x1500.jpg

关于python - 使用Python在图像中创建 "spotlight",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33603304/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com