繁体   English   中英

YUV420到RGB颜色转换错误

[英]YUV420 to RGB color conversion Error

我正在converting YUV420格式的图像convertingopencv RGB图像,但conversion.后我得到的是Orange图像conversion. 我使用以下代码来做到这一点。 我的代码有问题吗?

 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; i<origImage->height; i++)
{
  for (int j=0; j<origImage->width; 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 < 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));
  }
}

origImage - > YUV图片,
img1 - > RGB图像,

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

是否有任何opencv函数可以将YUV420格式的pixel转换为相应的RGB像素? (不是整个图像)

我通过修改计算RGB值的公式得到了答案,这段代码工作正常

 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; i<origImage->height; i++)
{
  for (int j=0; j<origImage->width; 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));
  }
}

第一个问题是使用过时的c-api(它已经死了并且已经消失了。请使用c ++代替)。

第二个问题是编写自己的(缓慢且容易出错的)像素循环

为什么不使用:

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

相反?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM