yiq ycbcr que obs modelo mejor espacio crominancia color image-processing opencv yuv

image processing - ycbcr - Cómo lidiar con la conversión de RGB a YUV



y cb cr que es (3)

Para los formatos planares, OpenCV no es la herramienta adecuada para el trabajo. En su lugar, es mejor utilizar ffmpeg. por ejemplo

static void rgbToYuv(byte* src, byte* dst, int width,int height) { byte* src_planes[3] = {src,src + width*height, src+ (width*height*3/2)}; int src_stride[3] = {width, width / 2, width / 2}; byte* dest_planes[3] = {dst,NULL,NULL}; int dest_stride[3] = {width*4,0,0}; struct SwsContext *img_convert_ctx = sws_getContext( width,height, PIX_FMT_YUV420P,width,height,PIX_FMT_RGB32,SWS_POINT,NULL,NULL,NULL); sws_scale(img_convert_ctx, src_planes,src_stride,0,height,dest_planes,dest_stride); sws_freeContext(img_convert_ctx); }

convertirá una imagen YUV420 a RGB32

La fórmula dice:

Y = 0.299 * R + 0.587 * G + 0.114 * B; U = -0.14713 * R - 0.28886 * G + 0.436 * B; V = 0.615 * R - 0.51499 * G - 0.10001 * B;

¿Qué pasa si, por ejemplo, la variable U se vuelve negativa?

U = -0.14713 * R - 0.28886 * G + 0.436 * B;

Suponga los valores máximos para R y G (unidades) y B = 0 Por lo tanto, estoy interesado en implementar esta función de realización en OpenCV. Entonces, ¿cómo lidiar con los valores negativos? ¿Utilizando imagen flotante? De todos modos por favor explícame, puede ser que no entiendo algo ..


Puede convertir RGB <-> YUV en OpenCV con cvtColor utilizando el code CV_YCrCb2RGB para YUV-> RGB y CV_RGBYCrCb para RGB-> YUV.

void cvCvtColor(const CvArr* src, CvArr* dst, int code)

Convierte una imagen de un espacio de color a otro.


Y, U y V pueden ser negativos cuando están representados por decimales, de acuerdo con el plano de color YUV .