Comment effectuer une conversion RGB-> YUV en C/C++?Comment effectuer une conversion RGB-> YUV en C/C++?
J'ai quelques Bitmap .. RVB Je dois le convertir en YUV
Libs? Tuts? Des articles?
Comment effectuer une conversion RGB-> YUV en C/C++?Comment effectuer une conversion RGB-> YUV en C/C++?
J'ai quelques Bitmap .. RVB Je dois le convertir en YUV
Libs? Tuts? Des articles?
La question a demandé comment effectuer la conversion en C/C++. ImageMagick est C++, bien sûr, mais aucune fonction n'est illustrée ici (plus ImageMagick est sous sa propre licence), donc j'ai voté et mis à jour la réponse de Leszek. –
Vérifiez cet article: http://www.fourcc.org/fccyvrgb.php La conversion est assez facile pour que vous puissiez probablement écrire votre propre fonction basée sur cette
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128
Salut Voyager j'ai besoin d'aide J'ai jeté mon code qui est yv12-> rgb565. De la même manière, je dois effectuer pour yuv444 à rgb888. Guidez-moi s'il-vous-plaît. S'il vous plaît vous pouvez regarder ma dernière question pour la fonction qui convertit yuv12-> rgb565 – Abhineet
Notez qu'il existe plusieurs normes régissant l'espace de couleur que vous pourriez rencontrer dans un fichier yuv (BT601, BT709, xvYcc) ces formauls vous donnera une image viwable avec la plupart de ceux-ci, mais vous devrez peut-être les changer pour obtenir les coplors "corrects" (vous devrez peut-être couper les valeurs d'entrée ou de sortie si vous avez des données xvYcc ou non 8 bits – tletnes
Vous pouvez également essayer ces entier que les calculs (devrait être plus rapide que les flotteurs)
#define CLIP(X) ((X) > 255 ? 255 : (X) < 0 ? 0 : X)
// RGB -> YUV
#define RGB2Y(R, G, B) CLIP((( 66 * (R) + 129 * (G) + 25 * (B) + 128) >> 8) + 16)
#define RGB2U(R, G, B) CLIP(((-38 * (R) - 74 * (G) + 112 * (B) + 128) >> 8) + 128)
#define RGB2V(R, G, B) CLIP(((112 * (R) - 94 * (G) - 18 * (B) + 128) >> 8) + 128)
// YUV -> RGB
#define C(Y) ((Y) - 16 )
#define D(U) ((U) - 128)
#define E(V) ((V) - 128)
#define YUV2R(Y, U, V) CLIP((298 * C(Y) + 409 * E(V) + 128) >> 8)
#define YUV2G(Y, U, V) CLIP((298 * C(Y) - 100 * D(U) - 208 * E(V) + 128) >> 8)
#define YUV2B(Y, U, V) CLIP((298 * C(Y) + 516 * D(U) + 128) >> 8)
// RGB -> YCbCr
#define CRGB2Y(R, G, B) CLIP((19595 * R + 38470 * G + 7471 * B) >> 16)
#define CRGB2Cb(R, G, B) CLIP((36962 * (B - CLIP((19595 * R + 38470 * G + 7471 * B) >> 16)) >> 16) + 128)
#define CRGB2Cr(R, G, B) CLIP((46727 * (R - CLIP((19595 * R + 38470 * G + 7471 * B) >> 16)) >> 16) + 128)
// YCbCr -> RGB
#define CYCbCr2R(Y, Cb, Cr) CLIP(Y + (91881 * Cr >> 16) - 179)
#define CYCbCr2G(Y, Cb, Cr) CLIP(Y - ((22544 * Cb + 46793 * Cr) >> 16) + 135)
#define CYCbCr2B(Y, Cb, Cr) CLIP(Y + (116129 * Cb >> 16) - 226)
's/avec actionscript/en C \/C++ /' ne fait pas une nouvelle question http://stackoverflow.com/questions/1737712/how-to-perform-rgb-yuv-conversion-with-actionscript – voyager
Vous voulez changer une valeur RVB en YUV? Ou changer un bitmap RVB en un fichier YUV? Vous voulez faire une conversion de fichier image, non? – voyager
Je suis sûr qu'il y a un moyen d'être un moyen de pousser ce travail sur la carte gfx. Ce type d'opération est parfait pour la carte gfx. – fishfood