遍历所有 RGB 值并将图像拼接在一起
Looping through all the RGB values and stitching images together
我是编码新手,我真的很困惑。从下面的代码中,我试图打印出从 (0,0,0) 到 (255,255,255) 的 RGB 光谱中的每一种颜色,因此从技术上讲,应该打印出 256^3 个包含所有颜色的图像。我已经在下面完成了它,它只对红色或蓝色或绿色光谱而不是组合进行。我试图对打印出的所有颜色做的是将它们以这种格式逐像素拼接在一起。我不想打印出所有图像,而是在最后得到组合版本。任何帮助将不胜感激!非常感谢您的帮助!
我想获得从 0 到 255 的 3 个变量的所有组合。例如,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')
您需要三个嵌套的 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))
这使用 生成器 来创建许多不同的颜色 (each_color()
)。在其上使用 next()
returns 一种颜色接着另一种颜色。然后你可以在嵌套循环中使用它来为每个像素着色。
请注意,生成器将产生 1670 万个值,但使用此代码您将只要求 1000000 个像素(这很好,生成器无需耗尽),因此该图像中不会使用大部分颜色。
我是编码新手,我真的很困惑。从下面的代码中,我试图打印出从 (0,0,0) 到 (255,255,255) 的 RGB 光谱中的每一种颜色,因此从技术上讲,应该打印出 256^3 个包含所有颜色的图像。我已经在下面完成了它,它只对红色或蓝色或绿色光谱而不是组合进行。我试图对打印出的所有颜色做的是将它们以这种格式逐像素拼接在一起。我不想打印出所有图像,而是在最后得到组合版本。任何帮助将不胜感激!非常感谢您的帮助!
我想获得从 0 到 255 的 3 个变量的所有组合。例如,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')
您需要三个嵌套的 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))
这使用 生成器 来创建许多不同的颜色 (each_color()
)。在其上使用 next()
returns 一种颜色接着另一种颜色。然后你可以在嵌套循环中使用它来为每个像素着色。
请注意,生成器将产生 1670 万个值,但使用此代码您将只要求 1000000 个像素(这很好,生成器无需耗尽),因此该图像中不会使用大部分颜色。