【问题标题】:Looping through all the RGB values and stitching images together循环遍历所有 RGB 值并将图像拼接在一起
【发布时间】:2018-06-14 13:53:24
【问题描述】:

我是编码新手,我真的很困惑。从下面的代码中,我试图打印从 (0,0,0) 到 (255,255,255) 的 RGB 光谱中的每一种颜色,所以从技术上讲,应该有 256^3 图像打印所有颜色。我已经在下面做了它,它只适用于红色或蓝色或绿色光谱,而不是组合。我试图对打印出来的所有颜色做的是以这种格式将它们逐个像素地拼接在一起。我不想打印出所有图像,但最后得到组合版本。任何帮助将不胜感激!非常感谢您的帮助!

我想得到 3 个变量的所有组合,从 0 到 255。例如,print axis 的输出将是:

(0,0,0)
(1,0,0)
(2,0,0)
...
(255,0,0)
(0,1,0)
(0,2,0)
...
(0,255,0)
(0,0,1)
(0,0,2)
...
(0,0,255)
(1,0,1)
...

所以基本上这 3 个数字的所有不同组合直到 255。

我尝试使用下面的那个,但我想要做的有点不同,我想要的每个像素都是不同的,并通过遍历值以逐像素格式拼接在一起。

Range values to pseudocolor

from PIL import Image
import sys


im = Image.new("RGB", (1, 1))
pix = im.load()

red=0
green=0
blue=0
j=0

while red<255 and green<255 and blue<255:
    j+=1
    red +=1
    #green +=1
    #blue+=1
    for x in range(1):
        for y in range(1):
            axis = (red,green,blue)
            pix[x,y] = axis
        print axis
        im.save('Test {}.png'.format(j), "PNG")

#stitching images together
images = map(Image.open, ['Test 1.png', 'Test 255.png', 'Test 100.png'])
widths, heights = zip(*(i.size for i in images))

total_width = sum(widths)
max_height = max(heights)

new_im = Image.new('RGB', (total_width, max_height))

x_offset = 0
for im in images:
    new_im.paste(im, (x_offset,0))
    x_offset += im.size[0]

new_im.save('test.jpg')

【问题讨论】:

    标签: python colors python-imaging-library rgb


    【解决方案1】:

    您需要三个嵌套的 for 循环来完成此操作:

    for r in range(256):
      for g in range(256):
        for b in range(256):
          do_your_thing_with(r, g, b)
    

    你想要做什么仍然有点不清楚,但我想警告你:你似乎想再次在这些循环中嵌套 x 和 y 循环。你会很快做一些需要很长时间才能完成的事情。毕竟,256×256×256 已经是 ~1670 万。如果您现在遍历 1000×1000 像素图像中的每个像素,那么您将进行 16.7 万亿次迭代。

    考虑您想要做什么,并可能将您的问题和示例代码减少到必要的最低限度,以了解您的问题所在。

    关于您的评论:

    我建议这样做是为了创建一个有很多颜色的图像:

    def each_color():
      for r in range(256):
        for g in range(256):
          for b in range(256):
            yield r, g, b
    
    color_provider = each_color()
    for x in range(1000):
      for y in range(1000):
        set_pixel(x, y, color=next(color_provider))
    

    这使用 generator 来创建许多不同的颜色 (each_color())。在其上使用next() 会返回一种颜色。然后您可以在嵌套循环中使用它来为每个像素着色。

    请注意,生成将产生 1670 万个值,但使用此代码您将只要求 1000000 像素(这很好,生成器不需要耗尽),因此大多数颜色不会在此图像中使用。

    【讨论】:

    • 您好,非常感谢。我不想保存所有图像,我只想要一张 100,000 像素不同颜色的图像,而不是 1600 万像素。
    • 我添加了一个更具体的示例代码来演示如何以更 Pythonic 的方式实现您想要的。
    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2021-06-18
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多