Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成随机颜色(RGB)_Python_Random_Rgb - Fatal编程技术网

Python 生成随机颜色(RGB)

Python 生成随机颜色(RGB),python,random,rgb,Python,Random,Rgb,上周,在一位朋友的建议下,我刚开始用python进行图像处理,生成随机颜色的图案。我在网上找到了这段脚本,它可以在RGB光谱中生成大量不同的颜色 def random_color(): levels = range(32,256,32) return tuple(random.choice(levels) for _ in range(3)) 我只是对附加这个脚本以只生成三种随机颜色中的一种感兴趣。最好是红色、绿色和蓝色。此处: def random_color():

上周,在一位朋友的建议下,我刚开始用python进行图像处理,生成随机颜色的图案。我在网上找到了这段脚本,它可以在RGB光谱中生成大量不同的颜色

def random_color():
    levels = range(32,256,32)
    return tuple(random.choice(levels) for _ in range(3))
我只是对附加这个脚本以只生成三种随机颜色中的一种感兴趣。最好是红色、绿色和蓝色。

此处:

def random_color():
    rgbl=[255,0,0]
    random.shuffle(rgbl)
    return tuple(rgbl)
结果是红色、绿色或蓝色。但是,该方法不适用于其他颜色集,在这些颜色集中,您必须建立一个要从中选择的所有颜色的列表,然后使用random.choice随机选择一种颜色。

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


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

color=list(np.random.choice(范围256,大小=3))


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

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

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

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

tuple(np.random.randint(256, size=3)) + (255,)
如果您只需要RGB:

tuple(np.random.randint(256, size=3))
以(r,b,g)形式输出,其外观类似(255155100)


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

可以轻松生成随机RGB调色板,并且可以从列表中选择喜爱的颜色贴图

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

如果您不需要这么多颜色,只需将调色板剪切到所需的长度即可。

在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\u color
为随机颜色创建形状,例如:

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

如果您不希望从256×256×256色的完整空间中采样颜色——因为以这种方式生成的颜色可能看起来不“漂亮”,其中许多颜色太暗或太白——您可能需要从颜色贴图中采样颜色

该软件包包含(向下滚动查看showcase),并允许简单的随机采样:

导入cmapy
随机输入
rgb_color=cmapy.color('viridis',random.randrange(0,256),rgb_order=True)

您可以通过添加范围步骤使颜色更加清晰:
random.randrange(0,256,10)
生成随机十六进制颜色:

从数学导入楼层
从随机导入随机
def random_hex_颜色(大写=False):
十六进制零件='0123456789abcdef'
颜色='#'
对于范围(6)中的i:
颜色+=六角零件[地板(随机()*16)]
如果大写==True:
返回颜色。上()
其他:
返回颜色
要生成随机RGB颜色,请执行以下操作:

来自随机导入randint
def random_rgb_color():
r=randint(0255)
g=randint(0255)
b=randint(0255)
返回元组([r,g,b])

这两种方法都能正常工作。

应该是color=list(np.random.random(size=3)*256)Hi@Rahul,你能给你的答案添加一些解释吗?这只是返回一个由0到255之间的三个随机数组成的数组,这是RGB颜色规范的一个整体。为什么不从000000-FFFFFF范围中选择随机颜色呢。例如,您可以使用以下内容:
f“#{random.randrange(0x1000000):06x}”
您将此作为答案发布。默认情况下,作者的用户名添加到每个答案的下方(除非是社区wiki)。说这是一个答案,这是你的是多余的。相反,这确实有助于提高你的文章质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。在任何情况下,random.randint(a,b)从封闭区间[a,b]采样,即两端都包含在内,因此random.randint(1256)不正确。RGBA值应在0-1范围内
#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);
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)
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))
pygame.draw.line(screen, rand_color, (0, 0), (600, 400), 20)