Bonjour,
J'aimerai effectuer la conversion d'une image RGB vers une image YUV, en utilisant la librairie openCV.
Je possède l'image suivante : http://www.hannibalcsd.org/teacherwe...mples/lena.jpg
Et je lui applique le code suivant :
Le problème, c'est que ça ne marche pas, quand j'affiche l'image convertie en YUV, j'imagine qu'elle devrait ressembler à l'originale, mais elle est devenue très bleue, comme si j'avais forcé sur le bleu...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 IplImage *img2=cvLoadImage("lena.jpg"); IplImage *img3=cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3); // boucle de conversion rgb vers yuv int i; for (i = 2; i < img2->imageSize; i+=3) img3->imageData[i-2] = (0.299*img2->imageData[i-2] + 0.587*img2->imageData[i-1] + 0.114*img2->imageData[i]); img3->imageData[i-1] = -0.147*img2->imageData[i-2] - 0.289*img2->imageData[i-1] + 0.436*img2->imageData[i]; img3->imageData[i] = 0.615*img2->imageData[i-2] - 0.515*img2->imageData[i-1] - 0.100*img2->imageData[i]; */ // a visualization window is created with title 'image' cvNamedWindow("image RGB",1); cvNamedWindow("image YUV",1); // img is shown in 'image' window cvShowImage ("image RGB", img2); cvShowImage ("image YUV",img3); //wait for a keyboard event cvWaitKey(0) return(0);
J'ai lu ensuite que openCV chargait les images au format BGR, j'ai testé en modifiant mon algorithme en conséquence, cette fois ci, image très rouge...
j'ai vérifié l'algorithme sur wikipédia, et c'est le bon. Le problème est plus fondamentale, y'a des trucs de bases qui doivent m'échapper
Déjà : ma photo de base est elle réellement en RGB ? y'a t'il une différrence entre espace des couleurs (yuv, rgb etc.) et format du fichier (jpg,png etc.)
Est ce qu'un jpeg est forcément en rgb ? ou alors un jpeg peut être en ce qu'il veut.
Et quand openCV affiche une image avec cvImageShow, comment il sait qu'elle espace de couleur j'ai utilisé ? Il y a un champ dans IplImage pour le préciser ? Moi j'ai pas trouvé!
Bref, pour être sur que mon algorithme n'est pas en cause, j'ai essayé ça aussi :
Et c'est toujours aussi dégueulasse !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cvCvtColor(img2, img3, CV_BGR2Luv);
Pourtant, cvCvtColor convertit correctement lui !
En même temps c'est vrai que je sais pas à quoi est censé ressemblé du Luv, mais ça avait l'air proche du Yuv de ce que j'ai compris.
Voilà, si quelqu'un pouvait m'aider à comprendre toutes ces questions pour que je puisse convertir du RGB en YUV et inversement, je lui en serait très reconnaissant !
Merci de m'avoir lu.
Partager