获得明亮的随机颜色Python

时间:2017-04-16 12:37:02

标签: python

enter image description here

大家好,在我的蛇游戏程序中,当用户选择" Rainbow"时,我需要多次生成随机颜色。主题。在线查看后,我发现了这个:

Generating a Random Hex Color in Python

得票最多的答案给出了

的解决方案
import random
r = lambda: random.randint(0,255)
print('#%02X%02X%02X' % (r(),r(),r()))

然而,这个程序也会产生非常暗淡的颜色;例如深棕色,有时甚至是黑色。如您所见,其中一些颜色与rainbow-y主题不匹配。

你如何改变上面的代码,以便你得到鲜艳的颜色,如亮橙色,粉红色,红色,蓝色等,你就明白了。一个假设的解决方案是增加randint r的最小值,但这使得所有颜色都非常白。 :'(

Plz,PLZ,PLZ,非常感谢帮助。

谢谢你们!

4 个答案:

答案 0 :(得分:8)

创建随机HLS颜色(使用.5左右的数字作为"级别"参数和数字高于.5作为"饱和度"参数)并将它们转换为RGB:

import random
import colorsys
h,s,l = random.random(), 0.5 + random.random()/2.0, 0.4 + random.random()/5.0
r,g,b = [int(256*i) for i in colorsys.hls_to_rgb(h,l,s)]

这将确保您始终拥有高度饱和,明亮的色彩。

答案 1 :(得分:1)

为什么不将所有喜欢的颜色的十六进制代码放在列表中,并使用import Data.Lazy (Lazy, defer) newtype User = User { name :: String , organization :: Lazy Organization } newtype Organization = Organization { name :: String , users :: Array User } fed :: Organization fed = Organization { name: "Federal Reserve" , users: [ User { name: "Pamela", organization: defer \_ -> fed } , User { name: "Jillian", organization: defer \_ -> fed } ] } 从该列表中选择一个随机项?我现在使用颜色名称而不是十六进制代码,但是例如:

random.choices()

答案 2 :(得分:0)

如果以较高的数字开始随机播放,则颜色会变浅,例如:

import random

def random_color():
        rand = lambda: random.randint(100, 255)
        return '#%02X%02X%02X' % (rand(), rand(), rand())

答案 3 :(得分:0)

尝试这段代码:

import colorsys
import cv2
import numpy as np
import random
#generates random colors in semi rgb format


def create_blank(width, height, rgb_color=(0, 0, 0)):
    """Create new image(numpy array) filled with certain color in RGB"""
    # Create black blank image
    image = np.zeros((height, width, 3), np.uint8)

    # Since OpenCV uses BGR, convert the color first
    color = tuple(reversed(rgb_color))
    # Fill image with color
    image[:] = color

    return image
def random_colors(N, bright=True):
    """
    Generate random colors.
    To get visually distinct colors, generate them in HSV space then
    convert to RGB.
    """
    brightness = 1.0 if bright else 0.7
    hsv = [(i / N, 1, brightness) for i in range(N)]
    colors = list(map(lambda c: colorsys.hsv_to_rgb(*c), hsv))
    random.shuffle(colors)
    return colors
colors=random_colors(100)
for color in colors:
    r,g,b=color
    r=round(r*255)
    g=round(g*255)
    b=round(b*255)
    image = create_blank(width1, height1, rgb_color=(r,g,b))
cv2.imwrite('path/to/folder'+str(r)+str(g)+str(b)+'.jpg', image)