【问题标题】:Get a Bright Random Colour Python获得一个明亮的随机颜色 Python
【发布时间】:2017-04-16 12:37:01
【问题描述】:

大家好,在我的蛇游戏程序中,当用户选择“彩虹”主题时,我需要多次生成随机颜色。上网查了一下,发现是这样的:

Generating a Random Hex Color in Python

得票最多的答案给出了解决方案

import random
r = lambda: random.randint(0,255)
print('#%02X%02X%02X' % (r(),r(),r()))

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

您将如何更改上述代码以获得鲜艳的颜色,例如亮橙色、粉红色、红色、蓝色等,您明白了。一个假设的解决方案是增加 randint r 的最小值,但这只会使所有颜色都变得非常白。 :'(

请,请,请,我们将非常感谢您的帮助。

谢谢大家!

【问题讨论】:

  • random.randint(128,255) 会让它保持光明的一面。
  • 另一件事是当十六进制的三个部分相似时(如 #000000 或 #ececec 你会得到灰度颜色,所以要避免这些。
  • 您可以在 HSV 中生成具有高饱和度的颜色,然后将它们转换为 RGB。标准库中甚至还有一个 colorsys 模块来进行转换:docs.python.org/3.6/library/colorsys.html

标签: python


【解决方案1】:

创建一个随机 HLS 颜色(使用 0.5 左右的数字作为“级别”参数,使用 0.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)]

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

【讨论】:

  • 感谢蒂姆,我对您的代码做了一些修改,但这无疑让我走上了正轨。感谢方便的花花公子维基百科页面link,以及一个不错的网站link,我能够找到一个很好的“饱和度”(s)和亮度(l)范围:是的,根据维基它是亮度。
【解决方案2】:

如果你从一个更大的数字开始随机颜色会更亮,例如:

import random

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

【讨论】:

    【解决方案3】:

    为什么不将所有您喜欢的颜色的十六进制代码放在一个列表中,然后使用random.choices() 从该列表中选择一个随机项目?我现在使用颜色名称而不是十六进制代码,但是例如:

    import random
    
    color_list = ["orange", "pink", "red", "blue"]
    for i in range(9):
        print(random.choice(color_list))
    
    # blue
    # pink
    # pink
    # pink
    # red
    # red
    # blue
    # orange
    # blue
    

    【讨论】:

      【解决方案4】:

      试试这段代码:

      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)
      

      【讨论】:

        猜你喜欢
        • 2015-12-15
        • 2015-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-28
        • 2018-04-02
        • 1970-01-01
        • 2016-02-21
        相关资源
        最近更新 更多