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))
color
is 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::applyColorMap
kan 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_color
voor 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 %x
in combinatie met randint
hier 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:
RGB255
Retourneer lijst van 3 gehele getallen tussen 0 en 255RGB1
Return-lijst van 3 decimalen tussen 0 & amp; 1