gpt4 book ai didi

python - 枕头中 float 图像的堆叠线图

转载 作者:太空宇宙 更新时间:2023-11-04 03:44:26 26 4
gpt4 key购买 nike

我正在使用 float 图像绘制一些线条。

from PIL import Image, ImageDraw

im = Image.new("F", (64, 64), 0)
draw = ImageDraw.Draw(im)
draw.line((0, 0, 64, 64), 128, 5)
draw.line((0, 64, 64, 0), 128, 5)
im.show()

wrong result

但是,它不会一个接一个地堆叠行。我希望得到一个结果,其中从两个线条图都添加了值。

expected result

我尝试对两个 float 图像进行 add_modulo

from PIL import Image, ImageDraw, ImageChops
im1 = Image.new("F", (64, 64), 0)
draw = ImageDraw.Draw(im1)
draw.line((0, 0, 64, 64), 128, 5)

im2 = Image.new("F", (64, 64), 0)
draw = ImageDraw.Draw(im2)
draw.line((0, 64, 64, 0), 128, 5)

im = ImageChops.add_modulo(im1, im2)

但是 Pillow 引发了一个 ValueError: image has wrong mode(这对于很多行来说效率很低)。

除了在两个图像上迭代以添加像素之外,还有其他方法可以做到这一点吗?

编辑:似乎 scikit-image 遇到了同样的问题,所以我也接受涉及它的任何解决方案。

最佳答案

您可以使用绘图模块生成坐标和值,然后将它们添加到图像(这只是一个标准的 numpy 数组):

from skimage.draw import line_aa
import matplotlib.pyplot as plt
import numpy as np

image = np.zeros((64, 64), dtype=float)

for (rr, cc, val) in [line_aa(0, 0, 63, 63),
line_aa(63, 0, 0, 63)]:
image[rr, cc] += val

image /= image.max()

plt.imsave("/tmp/out.png", image, vmin=0, vmax=1, cmap='gray')

如果你需要绘制更宽的线,我们有这样的功能,虽然它目前有点隐藏在 measure 子模块中。如果您觉得它有用,我很乐意在绘图模块中展示它。

关于python - 枕头中 float 图像的堆叠线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571492/

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