生成随机颜色(RGB)

时间:2015-03-11 23:25:15

标签: python random python-imaging-library

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

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

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

15 个答案:

答案 0 :(得分:18)

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

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

color现在是一个大小为3的列表,其值在0到255之间。您可以将其保存在列表中,以记录之前是否生成了颜色。

答案 1 :(得分:13)

您也可以使用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)

例如

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)

['#C7980A','#F4651F','#82D8A7','#CC3A05','#575E76& #39;,'#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()

enter image description here

答案 2 :(得分:9)

下面:

def random_color():
    rgbl=[255,0,0]
    random.shuffle(rgbl)
    return tuple(rgbl)

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

答案 3 :(得分:3)

如果您不想从 256×256×256 种颜色的全部可能空间中采样您的颜色——因为以这种方式产生的颜色可能看起来不“漂亮”,其中许多颜色太暗或太白—— - 您可能想要从颜色图中采样颜色。

cmapy 包含 color maps from Matplotlib(向下滚动展示),并允许简单的随机抽样:

import cmapy
import random
rgb_color = cmapy.color('viridis', random.randrange(0, 256), rgb_order=True)

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

答案 4 :(得分:2)

以一个统一的随机变量作为RGB的值,可能会产生大量的灰、白、黑,这些往往不是我们想要的颜色。

cv::applyColorMap 可以轻松生成随机 RGB 调色板,您可以从列表中选择喜欢的颜色映射here

C++11 示例:

#include <algorithm>
#include <numeric>
#include <random>
#include <opencv2/opencv.hpp>

std::random_device rd;
std::default_random_engine re(rd());

// Generating randomized palette
cv::Mat palette(1, 255, CV_8U);
std::iota(palette.data, palette.data + 255, 0);
std::shuffle(palette.data, palette.data + 255, re);
cv::applyColorMap(palette, palette, cv::COLORMAP_JET);

// ...

// Picking random color from palette and drawing
auto randColor = palette.at<cv::Vec3b>(i % palette.cols);
cv::rectangle(img, cv::Rect(0, 0, 100, 100), randColor, -1);

Python3 示例:

import numpy as np, cv2

palette = np.arange(0, 255, dtype=np.uint8).reshape(1, 255, 1)
palette = cv2.applyColorMap(palette, cv2.COLORMAP_JET).squeeze(0)
np.random.shuffle(palette)
# ...

rand_color = tuple(palette[i % palette.shape[0]].tolist())
cv2.rectangle(img, (0, 0), (100, 100), rand_color, -1)

如果你不需要这么多颜色,你可以把调色板剪成你想要的长度。

答案 5 :(得分:2)

在 pygame 中,您可以这样做:

import pygame
import random

r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
rand_color = (r, g, b)

对于较短的代码,这里有一个替代方案:

import pygame
import random

rand_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

然后您可以使用参数 rand_color 为随机颜色创建一个形状,例如:

pygame.draw.line(screen, rand_color, (0, 0), (600, 400), 20)

答案 6 :(得分:1)

使用自定义颜色(例如,深红色,深绿色和深蓝色):

import random

COLORS = [(139, 0, 0), 
          (0, 100, 0),
          (0, 0, 139)]

def random_color():
    return random.choice(COLORS)

答案 7 :(得分:0)

color = lambda : [random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

答案 8 :(得分:0)

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

tuple(np.random.randint(256, size=3)) + (255,)

如果您只需要RGB:

tuple(np.random.randint(256, size=3))

答案 9 :(得分:0)

以(r,b,g)形式的输出看起来像(255,155,100)

from numpy import random
color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

答案 10 :(得分:0)

生成随机十六进制颜色:

from math import floor
from random import random

def random_hex_color(uppercase=False):
    hex_parts = '0123456789abcdef'
    
    color = '#'
    for i in range(6):
        color += hex_parts[floor(random() * 16)]
    
    if uppercase == True:
        return color.upper()
    else:
        return color

生成随机 RGB 颜色:

from random import randint

def random_rgb_color():
    r = randint(0, 255)
    g = randint(0, 255)
    b = randint(0, 255)
    
    return tuple([r, g, b])

两种方法都按预期工作。

答案 11 :(得分:0)

您可以在这里使用 %x 运算符和 randint 结合来生成颜色

colors_ = lambda n: list(map(lambda i: "#" + "%06x" % random.randint(0, 0xFFFFFF),range(n)))

运行函数生成2个随机颜色:

colors_(2)

输出 ['#883116', '#032a54']

答案 12 :(得分:0)

试试这个代码

import numpy as np

R=np.array(list(range(255))
G=np.array(list(range(255))
B=np.array(list(range(255))
np.random.shuffle(R)
np.random.shuffle(G)
np.random.shuffle(B)
def get_color():

    for i in range(255):
         yield (R[i],G[i],B[i])
palette=get_color()
random_color=next(palette) # you can run this line 255 times 

答案 13 :(得分:0)

以下解决方案没有任何外部包

import random

def pyRandColor():
    randNums = [random.random() for _ in range(0, 3)]

    RGB255 = list([ int(i * 255) for i in randNums ])
    RGB1 = list([ round(i, 2) for i in randNums ])
    return RGB1

示例用例:

print(pyRandColor())
# Output: [0.53, 0.57, 0.97]

注意:

  • RGB255 返回 0 到 255 之间的 3 个整数的列表
  • RGB1 返回 0 和 1 之间 3 位小数的列表

答案 14 :(得分:-2)

import random
rgb_full="(" + str(random.randint(1,256))  + "," + str(random.randint(1,256))  + "," + str(random.randint(1,256))  + ")"