2 votes

Créer un histogramme de couleur à partir d'un fichier image

J'aimerais utiliser Nim pour vérifier les résultats des exécutions de mes tests de Puppeteer. Une partie du résultat final est une capture d'écran. Cette capture d'écran doit contenir un certain nombre de couleurs actives. Une couleur active est orange, bleue, rouge ou verte. Elles indiquent la présence d'une activité dans les données entrantes. Le noir, le gris et le blanc doivent être exclus, car ils ne représentent que des données statiques.

Je n'ai pas encore trouvé de solution que je puisse utiliser.

import stb_image/read as stbi

var
  w, h , c:int
  data: seq[uint8]
  cBin: array[256,int] #colour range was 0->255 afaict
data = stbi.load("screenshot.png",w,h,c,stbi.Default)
for d in data:
  cBin[(int)d] = cBin[(int)d] + 1
echo cBin

J'ai maintenant un tableau d'uint, que je peux utiliser pour construire un histogramme des valeurs, mais je ne sais pas comment les faire correspondre à quelque chose comme des valeurs RVB. Quelqu'un veut-il des pointeurs ?

Existe-t-il un meilleur paquet qui a ceci automatiquement, je n'en ai pas trouvé.

2voto

hola Points 847

stbi.load() retournera une séquence de composantes de couleur uint8 entrelacées. Le nombre de composantes entrelacées est déterminé soit par c (c'est-à-dire channels_in_file ) ou desired_channels lorsqu'il est différent de zéro.

Par exemple, lorsque channels_in_file == stbi.RGB and desired_channels == stbi.Default il y a 3 composantes entrelacées de rouge, vert et bleu.

[
# r    g    b
  255, 0,   0,   # Pixel 1
  0,   255, 0,   # Pixel 2
  0,   0,   255, # Pixel 3
]

Vous pouvez traiter ce qui précède comme :

import colors
for i in countUp(0, data.len - 3, step = stbi.RGB):
  let
    r = data[i + 0]
    g = data[i + 1]
    b = data[i + 2]
    pixelColor = colors.rgb(r, g, b)
  echo pixelColor

Vous pouvez en savoir plus à ce sujet dans les commentaires du fichier stb_image.h.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X