begin process at 2012 05 28 15:51:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Graphique

 > 

changer paramètres HSV des pixels d'une image


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

changer paramètres HSV des pixels d'une image

mercredi 27 juillet 2005 à 09:36:49 | changer paramètres HSV des pixels d'une image

yac_yac

Bonjour,
Voilà , je développe avec une interface delphi qui utilise une dll en C faisant appel à la bibliothèque OpenCV de traitement d'images.

Quelqu'un peut me dire comment atteindre chaque pixel d'une image pour faire varier un des paramètres HSV ???

Suit ce que j'ai essayé de faire --> j'obtiens des résultats faux...






void cvModifImgHLS(char *p_imgpath, char *p_imgpathHLS, int p_offsetH, int p_offsetS, int p_offsetV)

{

int i, j; //compteurs pour balayages des pixels dans boucle

IplImage *cvImg; //déclaration de l'img couleur RGB appelée initialement

IplImage *cvImgHLS; //déclaration de l'img couleur HSV modifiée

cvImg = cvLoadImage( p_imgpath, 1); //chargement de l'image couleur RGB dans cvImg

cvImgHLS = cvCreateImage(cvSize(768,576), /*IPL_DEPTH_8U*/8, 3 );//création de l'espace pour contenir l'image HSV modifiée

cvCvtColor( cvImg, cvImgHLS, CV_RGB2HSV ); //conversion RGB -> HLS

/*Modification des paramètres HLS (attribution des offset initialisés par les Trackbars de l'interface Delphi)*/

for(i=0; i<768; i++)

{

for(j=0; j<576; j++)

{

/* pour la composante H */

((uchar*)(cvImgHLS->imageData + cvImgHLS->widthStep*j))[i*3] =

((uchar*)(cvImg->imageData + cvImg->widthStep*j))[i*3] + p_offsetH;

/* pour la composante S */

((uchar*)(cvImgHLS->imageData + cvImgHLS->widthStep*j))[i*3+1] =

((uchar*)(cvImg->imageData + cvImg->widthStep*j))[i*3+1] + p_offsetS;

/* pour la composante V */

((uchar*)(cvImgHLS->imageData + cvImgHLS->widthStep*j))[i*3+2] =

((uchar*)(cvImg->imageData + cvImg->widthStep*j))[i*3+2] + p_offsetV;

}

/*Sauvegarde de l'image modifiée */

cvSaveImage(p_imgpathHLS,cvImgHLS);

}

//////////////////////////////

void cvConvRGB_HSV (float Red, float Green, float Blue)//change en : H:[0-255] S:[0-255] V:[0-255]

{

float hue, saturation, value;

float maxcolor, mincolor;

Red = Red/256;

Green = Green/256;

Blue = Blue/256;

maxcolor = MAX(Red, MAX(Green, Blue));

mincolor = MIN(Red, MIN(Green, Blue));

/* value */

value = maxcolor;

/* saturation */

if(maxcolor == 0)

saturation = 0;

else

saturation = (maxcolor - mincolor) / maxcolor;

/* hue */

if(saturation == 0) {

hue = 0;

} else {

if(Red == maxcolor)

hue = (Green - Blue) / (maxcolor-mincolor);

else if(Green == maxcolor)

hue = 2.0 + (Blue - Red) / (maxcolor - mincolor);

else

hue = 4.0 + (Red - Green) / (maxcolor - mincolor);

if(hue > 1)

hue /= 6.0;

if(hue < 0)

hue++;

}

Red = (int)(hue * 255.0); //correspond en réalité à H,S,V

Green = (int)(saturation * 255.0);

Blue = (int)(value * 255.0);

}





... développeur d'occasion's' ...
mercredi 27 juillet 2005 à 09:49:29 | Re : changer paramètres HSV des pixels d'une image

buno

Administrateur CodeS-SourceS
Attention!!
Quand tu utilises la structure IPL, tu peux lui spécifier l'origine du repère image. Par défaut, me semble-t-il, l'origine se trouve en bas à gauche. Pour être plus clair:

Voici ta matrice de pixel avec l'origine indiquée par 'O':
X X X X X
X X X X X
X X X X X
X X X X X
O X X X X

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
mercredi 27 juillet 2005 à 10:57:18 | Re : changer paramètres HSV des pixels d'une image

yac_yac

Je ne comprend pas très bien, l'important n'est-il pas de balayer tous les pixels d'une image (ici 768*576). 
Si je fais varier le paramètre H par exemple sur toute l'image, je rajoute le même offset H pour chaque pixel ; l'image résultante ne dépend pas de la façon dont j'ai parcouru les pixels.
Cela dit,  merci beaucoup, je n'avais en effet pas à l'ésprit que l'origine du repère était en bas à gauche par défaut...

Si tu as d'autres pistes, je suis preneur car je suis vraiment à la bourre là (pour être honnête, j'ai 32h pour résoudre le pb)....
yac.
I

... développeur d'occasion's' ...
mercredi 27 juillet 2005 à 11:04:06 | Re : changer paramètres HSV des pixels d'une image

buno

Administrateur CodeS-SourceS
Ok! Désolé pour le couop de l'origine mais je me suis fait avoir donc je te préviens...
Sinon, je sais que quand j'accédais "moi-même" aux valeurs des pixels (imageData[...]), ça foirait à tous les coups!!

Voici quelques pistes:
- prends garde à utiliser image->widthStep plutôt que image->width dans les boucles de parcours d'images car les pixels ont été alignés
- regarde les fonctions cvCopy() et cvSet()

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
mercredi 27 juillet 2005 à 12:22:42 | Re : changer paramètres HSV des pixels d'une image

Urgo

Membre Club
BITMAP EN GRAYSCALE (WIN32):
http://www.cppfrance.com/code.aspx?ID=32603

Cette source déposée récemment par moi-même parcours tous les pixels d'une image et applique des coefficients pour la mettre en N&B... Je pense qu'elle t'aidera en dernier recours.


Ciao
Urgo


Cette discussion est classée dans : red, green, cvimg, cvimghls, maxcolor


Répondre à ce message

Sujets en rapport avec ce message

ASCII-Navigation par fleche [ par Twinuts ] Salut a tous,j'ai un souci avec les touches directionnelles du clavier, en gros c'est la premiere fois que je les utilise et je ne vois pas pourquoi c pb creation ou utilisation OCX [ par hilairenicolas ] Bonjour à tous, j'ai crée un OCX en VC++ dans le but de l'utiliser depuis un programme visual basic.Et j'ai un pb que je n'arrive pas à résoudre :J'in Algo Morphing...Grrrrr [ par AlexMAN ] Bonjour, Voila, j'ai codé un "algo" morphing, mais il est assez lent, et pas parametrable (jn'ai aucun moyen de savoir combien de fois je dois appeler Equivalent de WinIoControl sous W2K ? [ par G0ss3Yn ] Salut tout le monde, j'ai besoin de l'équivalent de la fonction WinIoControl pour Win2K.Je sais que cette fonction fonctionne déjà sous Win2k mais ell Shellcode, pb adresse dans DLL [ par G0ss3Yn ] Salut !J'ai écrit un petit prog vulnérable tout simple. Un BOF est fait puis une adresse est passée à la fin du buffer. Cette adresse écrase correctem arbre 4-aire [ par professeurr ] Salut,Quelqu'un pourrait me founir la méthode de la définition d'une sctructure (struc) en C d'un arbre 4-aire ou a un tuto référant à cette structure Documentation sur les OS [ par manta7 ] Bonjour à tous, quelqu'un pourrait-il me donner l'adrsesse d'un site ou d'un document qui explique l'architecture d'un os, ses fonctions etc ...Merci Patron de classe et precompilation [ par popi0016 ] Bonjour, j'essaie de programmer avec Builder6 (Borland) mes 1ers patrons de classe. Malgre bien avoir suivit mon tutorial le compilateur refuse la com Lire un fichier en C [ par Angelotus ] Bonjour,Je suis étudiante (1ère année) en ingénierie informatique.J'aurais besoin d'écrire un programme en C qui ouvre un fichier et affiche ce qu'il Programmer une imprimante [ par phenix5515 ] Je dois programmer une imprimante de type SATO CL408 en C pour imprimer des étiquettes de nomenclatures.


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,448 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales