2010-10-01 23 views
0

voici mon problème:C++, comment charger des images et compter les pixels de certaines couleurs

Je suis à la recherche d'un moyen d'importer une image en C++, puis parcourir ses pixels, incrémenter un compteur chaque fois qu'un pixel d'un certaine couleur est trouvée.

J'ai fait quelques recherches, mais je n'ai rien trouvé de particulièrement utile. DevIL semble être une bonne option, mais je ne sais pas par 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 tout ce travail, sauf en fait de trouver la couleur du courant pixel. Actuellement, j'utilise ceci:

int blue = ((uchar *)(img->imageData + pixelX*img->widthStep))[pixelY*img->nChannels + 0]; 

Mais cela ne fonctionne pas, et je ne sais pas comment cela fonctionne. Je n'ai pas été capable de trouver quelque chose à ce sujet que je pourrais comprendre. Quelqu'un pourrait-il me diriger dans la bonne direction sur la façon de trouver les valeurs RVB d'un certain pixel?

Éditer3 Terminé! Pour toute personne qui trouve cela en essayant de faire une chose similaire, la plupart de mes questions restantes et un peu de code peut être trouvé here. Merci pour l'aide!

+0

Vous essayez de calculer un histogramme (partiel). Votre bibliothèque graphique moyenne devrait être capable de le faire pour vous (imagemagick, au moins). – Seth

Répondre

0

Jetez un coup d'œil à OpenCV parce que lorsque vous aurez besoin de plus d'espace pour bouger, OpenCV vous permettra de faire beaucoup plus de tâches de vision par ordinateur. Et utilisez boost::filesystem pour faire le code 'pour chaque image dans le répertoire'.

Notez que la fonction cv::compare fait essentiellement la moitié du travail pour vous ... Je vous laisse lire cela et profiter de l'API OpenCV.

0

Dépend de la plate-forme et du format d'image. Sous Windows, les images BMP sont prises en charge de manière native (c'est-à-dire dans l'API). ImageMagick est une bibliothèque multi-plateforme, assez universelle, qui prend n'importe quel format, mais c'est lourd. Qt dispose également d'un traitement d'image limité aux formats les plus courants.

2

Jetez un coup d'œil à OpenCV.