相关文章推荐
有胆有识的人字拖  ·  matplotlib ...·  1 周前    · 
冷静的毛豆  ·  基于 K-Means ...·  2 年前    · 
憨厚的熊猫  ·  LabelEncoder: ...·  2 年前    · 
心软的夕阳  ·  Pandas ...·  2 年前    · 

生成随机颜色(RGB)

43 人关注

在一个朋友的建议下,我在上个星期刚刚学习了python的图像处理,以生成随机颜色的图案。我在网上找到了这个脚本,它能在RGB光谱上生成各种不同的颜色。

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

我只是想把这个脚本附加到只生成三种随机颜色中的一种。最好是红色、绿色和蓝色。

python
random
rgb
Travis A.
Travis A.
发布于 2015-03-12
15 个回答
varagrawal
varagrawal
发布于 2020-09-16
已采纳
0 人赞同

在256(又称8字节)范围内生成RGB三联体的一个巧妙方法是

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

color 现在是一个大小为3的列表,数值范围为0-255。你可以把它保存在一个列表中,以记录该颜色是否曾经产生过。

应该是color = list(np.random.random(size=3) * 256)
Or without np : rand_color = random.choices(range(256), k=3)
你可以使用一个元组。 color = tuple(np.random.random(size=3) * 256)
Khalil Al Hooti
Khalil Al Hooti
发布于 2020-09-16
0 人赞同

你也可以使用十六进制颜色代码。

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', '#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()
    
为什么不直接从0000-FFFFFF范围内选择随机的颜色。 例如,你可以用下面的方法。 【替换代码0
Fran Borcic
Fran Borcic
发布于 2020-09-16
0 人赞同

Here:

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

其结果是红色、绿色或蓝色。不过这个方法不适用于其他颜色集,你必须建立一个你想选择的所有颜色的列表,然后用随机.选择来随机挑选一种。

Rahul Kumar
Rahul Kumar
发布于 2020-09-16
0 人赞同
color = lambda : [random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)]
    
嗨,@Rahul,你能不能在你的答案中加入一些解释?
这只是简单地返回一个由0到255之间的三个随机数字组成的数组,这些数字构成了RGB颜色规格的一个整体。
Shital Shah
Shital Shah
发布于 2020-09-16
0 人赞同

受到其他答案的启发,这是比较正确的代码,产生整数0-255的值,如果你需要RGBA,则附加alpha=255。

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

If you just need RGB:

tuple(np.random.randint(256, size=3))
    
Oleg
RGBA值应在0-1范围内
Jan Pokorný
Jan Pokorný
发布于 2020-09-16
0 人赞同

如果你不希望你的颜色从256×256×256的全部可能空间中取样--因为这样产生的颜色可能看起来不 "漂亮",许多颜色太暗或太白--你可能想从一个颜色图中取样。

该套餐 cmap 包含 来自Matplotlib的彩色地图 (向下滚动查看展示),并允许简单的随机抽样。

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

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

Enderman
Enderman
发布于 2020-09-16
0 人赞同

Using random.randint() :

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

你也可以使用random.randrange() for less typing:

from random import randrange
r = randrange(255)
g = randrange(255)
b = randrange(255)
rand_color = (r, g, b)

你甚至可以用一条线来做这件事!(不包括进口)

from random import randrange
rand_color = (randrange(255), randrange(255), randrange(255))

然后你可以用这个颜色做任何你想做的事情。你可以做的一件事是,你可以在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)
    
Hugo
Hugo
发布于 2020-09-16
0 人赞同

具有自定义颜色(例如,深红色、深绿色和深蓝色)。

import random
COLORS = [(139, 0, 0), 
          (0, 100, 0),
          (0, 0, 139)]
def random_color():
    return random.choice(COLORS)
    
Devymex
Devymex
发布于 2020-09-16
0 人赞同

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

The 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)

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

Kukesh
Kukesh
发布于 2020-09-16
0 人赞同

Output in the form of (r,b,g) its look like (255,155,100)

from numpy import random
color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
    
Gangula
Gangula
发布于 2020-09-16
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]

Note:

  • RGB255 returns list of 3 integers between 0 and 255
  • RGB1 return list of 3 decimals between 0 & 1
  • Aman Bagrecha
    Aman Bagrecha
    发布于 2020-09-16
    0 人赞同

    你可以在这里使用 %x 运算符加上 randint 来生成颜色

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

    运行该函数,生成2种随机颜色。

    colors_(2)
    ['#883116', '#032a54']

    SAYANTAN MAZUMDAR
    SAYANTAN MAZUMDAR
    发布于 2020-09-16
    0 人赞同

    Try this code

    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 
        
    虽然这个代码可能会回答这个问题,但提供更多的背景,关于 how 和/或 why 它所解决的问题将提高答案的长期价值。
    Cassio Seffrin
    Cassio Seffrin
    发布于 2020-09-16
    0 人赞同

    假设你有一个数据框,或任何数组,你可以生成随机颜色或连续的颜色,如下所示。

    对于随机颜色(你可以选择你将产生的每一种随机颜色)。

    arraySize = len(df.month)
    colors = ['', ] * arraySize
    color = ["red", "blue", "green", "gray", "purple", "orange"]
    for n in range(arraySize):
        colors[n] = cor[random.randint(0, 5)]
    

    对于连续的颜色。

    import random    
    arraySize = len(df.month)
    colors = ['', ] * arraySize
    color = ["red", "blue", "green", "yellow", "purple", "orange"]
    i = 0
    for n in range(arraySize):
        if (i >= len(color)):
            i = 0
        colors[n] = color[i]
        i = i+1