生成随机颜色(RGB)

Tra*_* A. 10 python random python-imaging-library

我刚刚在朋友的建议下在python中选择了图像处理,以生成随机颜色的图案.我发现这个在线脚本可以在RGB光谱中生成各种不同的颜色.

def random_color():
    levels = range(32,256,32)
    return tuple(random.choice(levels) for _ in range(3))
Run Code Online (Sandbox Code Playgroud)

我很有兴趣将此脚本附加到仅生成三种随机颜色中的一种.优选红色,绿色和蓝色.

var*_*wal 26

在256(也称为8字节)范围内生成RGB三元组的一种巧妙方法是

color = list(np.random.choice(range(256), size=3))

color现在是一个大小为3的列表,其值在0-255范围内.您可以将其保存在列表中,以记录之前是否生成颜色.

  • 或者没有`np`:`rand_color = random.choices(range(256), k=3)` (7认同)
  • 应该是color = list(np.random.random(size = 3)*256) (5认同)

Kha*_*oti 17

您也可以使用Hex Color Code,

Name    Hex Color Code  RGB Color Code
Red     #FF0000         rgb(255, 0, 0)
Maroon  #800000         rgb(128, 0, 0)
Yellow  #FFFF00         rgb(255, 255, 0)
Olive   #808000         rgb(128, 128, 0)
Run Code Online (Sandbox Code Playgroud)

例如

import matplotlib.pyplot as plt
import random

number_of_colors = 8

color = ["#"+''.join([random.choice('0123456789ABCDEF') for j in range(6)])
             for i in range(number_of_colors)]
print(color)
Run Code Online (Sandbox Code Playgroud)

['#C7980A','#F4651F','#82D8A7','#CC3A05','#575E76','#156943','#0BD055','#ACD338']

让我们尝试在散点图中绘制它们

for i in range(number_of_colors):
    plt.scatter(random.randint(0, 10), random.randint(0,10), c=color[i], s=200)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 为什么不直接从 000000-FFFFFF 范围内选择随机颜色。例如,您可以使用以下内容:`f"#{random.randrange(0x1000000):06x}"` (5认同)

小智 10

这里:

def random_color():
    rgbl=[255,0,0]
    random.shuffle(rgbl)
    return tuple(rgbl)
Run Code Online (Sandbox Code Playgroud)

结果是红色,绿色或蓝色.该方法不适用于其他颜色组,但您必须构建所有颜色的列表,然后使用random.choice随机选择一种颜色.


ᴇɴᴅ*_*ᴍᴀɴ 8

使用random.randint()

from random import randint

r = randint(0, 255)
g = randint(0, 255)
b = randint(0, 255)
rand_color = (r, g, b)
Run Code Online (Sandbox Code Playgroud)

您还可以使用它random.randrange()来减少打字次数。

from random import randrange

r = randrange(255)
g = randrange(255)
b = randrange(255)
rand_color = (r, g, b)
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用一根线来完成此操作!

from random import randrange

rand_color = (randrange(255), randrange(255), randrange(255))
Run Code Online (Sandbox Code Playgroud)

然后你就可以用这个颜色做任何你想做的事情。你可以做的一件事是你可以在 pygame 中使用随机颜色创建一个形状。

from random import randrange
import pygame

rand_color = (randrange(255), randrange(255), randrange(255))

pygame.draw.line(screen, rand_color, (0, 0), (600, 400), 20)
Run Code Online (Sandbox Code Playgroud)


小智 6

color = lambda : [random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)]
Run Code Online (Sandbox Code Playgroud)

  • 嗨@Rahul,您能在您的答案中添加一些解释吗? (2认同)
  • 这只是返回一个由 0 到 255 之间的三个随机数组成的数组,它们构成了 RGB 颜色规范。 (2认同)

Shi*_*hah 6

受其他答案的启发,这是更正确的代码,可以生成 0-255 整数值,并在需要 RGBA 时附加 alpha=255:

tuple(np.random.randint(256, size=3)) + (255,)
Run Code Online (Sandbox Code Playgroud)

如果您只需要 RGB:

tuple(np.random.randint(256, size=3))
Run Code Online (Sandbox Code Playgroud)


Jan*_*rný 6

如果您不希望从 256\xc3\x97256\xc3\x97256 颜色的全部可能空间中对颜色进行采样 - 因为以这种方式生成的颜色可能看起来不“漂亮”,其中许多颜色太暗或太暗白色——您可能想从颜色图中采样颜色。

\n

cmpy包包含来自 Matplotlib 的颜色图(向下滚动以查看展示),并允许简单的随机采样:

\n
import cmapy\nimport random\nrgb_color = cmapy.color(\'viridis\', random.randrange(0, 256), rgb_order=True)\n
Run Code Online (Sandbox Code Playgroud)\n

您可以通过添加范围步骤使颜色更加清晰:random.randrange(0, 256, 10)

\n