Erreur de conversion des couleurs YUV420 en RVB

Je suis en converting une image au format YUV420 en image RGB opencv mais je reçois une image de couleur Orange après la conversion. J’ai utilisé le code suivant pour le faire. Y at-il un problème dans mon code ??

  int step = origImage->widthStep; uchar *data = (uchar *)origImage->imageData; int size = origImage->width * origImage->height; IplImage* img1 = cvCreateImage(cvGetSize(origImage), IPL_DEPTH_8U, 3); for (int i = 0; iheight; i++) { for (int j=0; jwidth; j++) { float Y = data[i*step + j]; float U = data[ (int)(size + (i/2)*(step/2) + j/2) ]; float V = data[ (int)(size*1.25 + (i/2)*(step/2) + j/2)]; float R = Y + (int)(1.772f*V); float G = Y - (int)(0.344f*V + 0.714f*U); float B = Y + (int)(1.402f*U); if (R < 0){ R = 0; } if (G < 0){ G = 0; } if (B  255 ){ R = 255; } if (G > 255) { G = 255; } if (B > 255) { B = 255; } cvSet2D(img1, i, j,cvScalar(B,G,R)); } } 

origImage -> image YUV,
img1 -> image RVB,

http://upload.wikimedia.org/wikipedia/en/0/0d/Yuv420.svg

Existe-t-il une fonction permettant de convertir un pixel au format YUV420 en pixel RVB correspondant? (pas l’image entière)

    J’ai eu la réponse en modifiant la formule de calcul des valeurs RVB, ce code fonctionne bien

      int step = origImage->widthStep; uchar *data = (uchar *)origImage->imageData; int size = origImage->width * origImage->height; IplImage* img1 = cvCreateImage(cvGetSize(origImage), IPL_DEPTH_8U, 3); for (int i = 0; iheight; i++) { for (int j=0; jwidth; j++) { float Y = data[i*step + j]; float U = data[ (int)(size + (i/2)*(step/2) + j/2) ]; float V = data[ (int)(size*1.25 + (i/2)*(step/2) + j/2)]; float R = Y + 1.402 * (V - 128); float G = Y - 0.344 * (U - 128) - 0.714 * (V - 128); float B = Y + 1.772 * (U - 128); if (R < 0){ R = 0; } if (G < 0){ G = 0; } if (B < 0){ B = 0; } if (R > 255 ){ R = 255; } if (G > 255) { G = 255; } if (B > 255) { B = 255; } cvSet2D(img1, i, j,cvScalar(B,G,R)); } } 

    Le 1er problème est d’utiliser la c-api obsolète (c’est mort et c’est parti. Merci d’utiliser c ++ à la place).

    le deuxième problème est l’écriture de vos propres boucles de pixels (lentes et sujettes aux erreurs)

    pourquoi ne pas utiliser:

     cvtColor(crs,dst, CV_YUV2BGR); // or CV_YUV2BGR_I420 

    au lieu ?