C ++, la façon de charger des images et compter les pixels de certaines couleurs
Question
Voici mon problème:
Je suis à la recherche d'un moyen d'importer une image en C ++, puis parcourir ses pixels, incrémenter un compteur à chaque fois que se trouve un pixel d'une certaine couleur.
Je l'ai fait quelques recherches, mais je n'ai rien trouvé particulièrement utile. DIABLE regards de comme une bonne option, mais je ne sais pas où commencer.
Voici un peu de pseudo-code C ++ / python illustrant espérons-ce que je suis en train de faire:
for image in folder:
A = 0;
B = 0;
for pixel in image:
if (pixel == colourA) {A++}
if (pixel == colourB) {B++}
//Output the count of colours for each image
outputToFile(A, B);
Quelqu'un at-il des conseils sur où commencer?
Merci
EDIT Quelques informations supplémentaires: J'utilise Windows 7 et toutes les images sont .pngs
EDIT2 J'ai travail de tout, sauf en fait de trouver la couleur du pixel courant. Actuellement, je suis en utilisant ceci:
int blue = ((uchar *)(img->imageData + pixelX*img->widthStep))[pixelY*img->nChannels + 0];
Mais il ne fonctionne pas, et je ne sais pas comment cela fonctionne. Je n'ai pas pu trouver quoi que ce soit au sujet de ce que je pouvais comprendre. Pourrait-il point quelqu'un me dans la bonne direction sur la façon de trouver les valeurs RVB d'un certain pixel?
Edit3 Terminé! Pour toute personne qui trouve cela en essayant de faire une chose semblable, la plupart de mes questions en suspens et un peu juste de code peut être trouvé ici . Merci pour l'aide!
La solution
prendre definiately un oeil à OpenCV parce que quand vous commencez à avoir besoin de plus d'espace pour se déplacer alors OpenCV vous permettra de faire de nombreuses tâches de vision plus d'ordinateur. Et utiliser boost :: système de fichiers faire la 'pour chaque image dir' code.
Notez que le cv :: comparer la fonction fait essentiellement la moitié du travail pour vous ... Je vous laisse lire cela et profiter de tirer parti de l'API OpenCV.
Autres conseils
Vous devriez jeter un oeil à OpenCV.
dépendante de la plate-forme et de l'image. Sous Windows, les images BMP sont pris en charge en mode natif (i. E. Dans l'API). ImageMagick est une bibliothèque multi-plateforme, assez universelle, prend tous les formats là-bas, mais il est lourd. Qt a un certain traitement de l'image et -. Limitée aux formats communs la plupart
SDL a des trucs de manipulation de pixels utiles.
Il est très propre aussi bien.