Willekeurige kleuren genereren (RGB)

Ik heb de afgelopen week op aanraden van een vriend beeldverwerking in python opgepakt om patronen van willekeurige kleuren te genereren. Ik vond dit stukje script online dat een breed scala aan verschillende kleuren genereert over het RGB-spectrum.

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

Ik vind het gewoon interessant om dit script toe te voegen om slechts één van de drie willekeurige kleuren te genereren. Bij voorkeur rood, groen en blauw.


Antwoord 1, autoriteit 100%

Hier:

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

Het resultaat is rood, groen of blauw. De methode is echter niet van toepassing op andere kleurensets, waar je een lijst moet maken van alle kleuren waaruit je wilt kiezen en vervolgens random.choice moet gebruiken om er willekeurig een te kiezen.


Antwoord 2, autoriteit 99%

Een handige manier om RGB-triplets te genereren binnen het bereik van 256 (ook wel 8-byte genoemd) is

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

coloris nu een lijst van maat 3 met waarden in het bereik van 0-255. U kunt het opslaan in een lijst om vast te leggen of de kleur al eerder is gegenereerd of niet.


Antwoord 3, autoriteit 91%

U kunt ook Hex Color Code gebruiken,

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)

Bijvoorbeeld

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’]

Laten we proberen ze in een spreidingsplot te plotten

for i in range(number_of_colors):
    plt.scatter(random.randint(0, 10), random.randint(0,10), c=color[i], s=200)
plt.show()


Antwoord 4, autoriteit 33%

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

Antwoord 5, autoriteit 22%

Geïnspireerd door andere antwoorden is dit een correctere code die integer 0-255 waarden produceert en alpha=255 toevoegt als je RGBA nodig hebt:

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

Als je alleen RGB nodig hebt:

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

Antwoord 6, autoriteit 17%

Met aangepaste kleuren (bijvoorbeeld donkerrood, donkergroen en donkerblauw):

import random
COLORS = [(139, 0, 0), 
          (0, 100, 0),
          (0, 0, 139)]
def random_color():
    return random.choice(COLORS)

Antwoord 7, autoriteit 17%

Als u niet wilt dat uw kleur wordt gesampled uit de volledig mogelijke ruimte van 256 × 256 × 256 kleuren – aangezien kleuren die op deze manier worden geproduceerd er misschien niet “mooi” uitzien, omdat veel van hen te donker of te wit zijn – – misschien wilt u een kleur uit een kleurenkaart proeven.

Het pakket cmapybevat kleurenkaarten van Matplotlib(scroll naar beneden voor showcase), en maakt eenvoudige willekeurige steekproeven mogelijk:

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

Je kunt de kleuren duidelijker maken door een bereikstap toe te voegen: random.randrange(0, 256, 10).


Antwoord 8, autoriteit 11%

Het nemen van een uniforme willekeurige variabele als de waarde van RGB kan een grote hoeveelheid grijs, wit en zwart genereren, wat vaak niet de kleuren zijn die we willen.

De cv::applyColorMapkan gemakkelijk een willekeurig RGB-palet genereren en u kunt een favoriete kleurenkaart kiezen uit de lijst hier

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

Voorbeeld voor 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)

Als je niet zoveel kleuren nodig hebt, kun je het palet gewoon op de gewenste lengte knippen.


Antwoord 9, autoriteit 11%

In pygame kun je dit doen:

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

Voor kortere code is hier een alternatief:

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

Vervolgens kun je een vorm maken met het argument rand_colorvoor een willekeurige kleur, bijvoorbeeld:

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

Antwoord 10, autoriteit 6%

Uitvoer in de vorm van (r,b,g) het ziet eruit als (255,155,100)

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

Antwoord 11

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

Antwoord 12

Een willekeurige hexadecimale kleur genereren:

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

Een willekeurige RGB-kleur genereren:

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

Beide methoden werken zoals bedoeld.


Antwoord 13

U kunt de operator %xin combinatie met randinthier gebruiken om kleuren te genereren

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

Voer de functie uit om 2 willekeurige kleuren te genereren:

colors_(2)

Uitvoer
[‘#883116’, ‘#032a54’]


Antwoord 14

Probeer deze 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 

Antwoord 15

Onderstaande oplossing is zonder extern pakket

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

Voorbeeldgebruik-case:

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

Opmerking:

  • RGB255Retourneer lijst van 3 gehele getallen tussen 0 en 255
  • RGB1Return-lijst van 3 decimalen tussen 0 & amp; 1

Other episodes