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 :
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);
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...

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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
cvCvtColor(img2, img3, CV_BGR2Luv);
Et c'est toujours aussi dégueulasse !
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.