【问题标题】:How can I optimize this wand code? It is very long to execute如何优化此魔杖代码?执行时间很长
【发布时间】:2019-07-23 05:11:13
【问题描述】:

我的本​​地机器上有一个代码需要 45 秒(这是一个很好的 i7 配置)。我目前正在使用魔杖,但如果您有其他想法,我愿意向其他图书馆开放。这段代码的目标是模糊一张图片的中间并逐渐模糊直到边框:

from wand.image import Image, CHANNELS
from wand.api import library
from wand.display import display
from wand.drawing import Drawing
from wand.color import Color

with Image(filename='paysage.jpg') as img:
    points = {'black': (0, img.height), 'white': (0, 0)}
    img.sparse_color('bilinear', points)
    img.function('polynomial', [3, -3, 1])
    img.negate()
    img.save(filename='filtre.jpg')

with Image(filename='paysage.jpg') as src:
    with Image(filename='filtre.jpg') as dst:
        src.composite(dst, operator='blur', arguments='20')
    src.save(filename='paysagefiltered.jpg')
    display(src)

感谢您的帮助:)

【问题讨论】:

  • 试试pillow-simd或opencv或两者的组合python-pillow.org/pillow-perf
  • 谢谢,您认为使用pillow-simd 可以做到这一点??
  • 谢谢,但这不是我想要的 :( 在你的例子中,一部分模糊图像粘贴在图片上,我想要一个真正的渐变
  • 嗯,这是一个如何应用模糊蒙版的示例。您可以很容易地想出一个解决方案,例如: 1 - 创建 10 个单独的模糊蒙版,长度 = orig_im.length, height = orig_im.height / 20,模糊半径随着每次迭代而变高。 2 - 自上而下堆叠模糊层 3 - 在 y 方向镜像堆栈 将模糊蒙版应用于原始 im。这可能不是最好的方法,但它会起作用:)

标签: python optimization wand


【解决方案1】:

另一个问题,直接应用具有逐渐变化的半径的模糊,从图像中裁剪部分,将所有图像组合成一个图像并应用最后一个模糊以平滑所有过渡。您可以根据需要调整值。

from PIL import Image
from PIL import ImageFilter

RADIUS = 0
INPUT_IMAGE_FILENAME = "./w2UR2.jpg"
OUTPUT_IMAGE_FILENAME = "./output.jpg"

# Open source image 
im = Image.open(INPUT_IMAGE_FILENAME)

# adjustable blur radius 
diam = 2 * RADIUS

w, h = im.size
step = int(h / 20)
result = Image.new("RGB", (w, h))

stack = []
for i in range(20):
    blur = im.filter(ImageFilter.GaussianBlur(diam / 2))
    crop = blur.crop((0, step * i, w, step * (i + 1)))
    result.paste(crop, (0, i * step))
    diam += (i < 10) - (i > 10)


# smooth out the whole image

result = result.filter(ImageFilter.GaussianBlur(1))
result.save(OUTPUT_IMAGE_FILENAME)

结果:

9岁i5的运行时间是:

➜  ~ time python a.py
python a.py  1.03s user 0.35s system 131% cpu 1.049 total

【讨论】:

    猜你喜欢
    • 2019-12-14
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2023-03-12
    • 2018-02-19
    • 2011-04-09
    • 2017-06-05
    相关资源
    最近更新 更多