【问题标题】:Blackmagic frame : convert from yuv to RGB to use in openCVBlackmagic 框架:从 yuv 转换为 RGB 以在 openCV 中使用
【发布时间】:2012-08-29 09:39:29
【问题描述】:

我在将相机捕获的 YUV 格式图像转换为 RGB 格式时遇到问题。

用于执行此操作的函数如下:

int uwidth = 1920;
int uheight= 1080;

int i = 0,j = 0, r = 0, g = 0, b = 0;
typedef unsigned char BYTE;
IplImage* m_RGB = cvCreateImage(cvSize(uwidth, uheight), IPL_DEPTH_8U, 3);
unsigned char* pData = (unsigned char *) frameBytes;

for(i = 0, j=0; i < uwidth * uheight*3 ; i+=6, j+=4)
{
   unsigned char u = pData[j];
   unsigned char y = pData[j+1];
   unsigned char v = pData[j+2];

   b = 1.0*y + 8 + 1.402*(v-128);
   g = 1.0*y - 0.34413*(u-128) - 0.71414*(v-128);
   r = 1.0*y + 1.772*(u-128);

   if(r>255) r =255;
   if(g>255) g =255;
   if(b>255) b =255;
   if(r<0)   r =0;
   if(g<0)   g =0;
   if(b<0)   b =0;

   m_RGB->imageData[i] = (BYTE)(r*220/256);
   m_RGB->imageData[i+1] = (BYTE)(g*220/256);
   m_RGB->imageData[i+2] =(BYTE)(b*220/256);

}

cvNamedWindow("ck", CV_WINDOW_AUTOSIZE);
cvShowImage( "ck", m_RGB );
cvReleaseImage(&m_RGB);

问题是我屏幕上的窗口中不是一张而是两张图片,而且我们的颜色很好,但比例不太好。

有人知道这些问题吗?

编辑: Image output

【问题讨论】:

标签: c++ opencv rgb yuv


【解决方案1】:

假设imageData 被定义为

BYTE* imageData;

在这种情况下,这个循环说明了很多:

for(i = 0, j=0; i &lt; uwidth * uheight*3 ; i+=6, j+=4)

i+=6 表示每次设置一个像素时都会跳过下一个像素(或者您希望执行的操作,一次设置 2 个像素)。

j+=4
unsigned char u = pData[j];
unsigned char y = pData[j+1];
unsigned char v = pData[j+2];

表示你的相机格式是UYVY

  • 它描述了两个连续的像素 P0 和 P1
  • P0 和 P1 的色度通道相同。U = U0 = U1V = V0 = V1
  • lumina 通道不同。第一个用于 P0,第二个用于 P1。

您需要通过迭代设置 2 个像素:

m_RGB->imageData[i] = r1;
m_RGB->imageData[i+1] = g1;
m_RGB->imageData[i+2] =b1;
m_RGB->imageData[i+3] = r2;
m_RGB->imageData[i+4] = g2;
m_RGB->imageData[i+5] =b2;

r1r2(以及其他)之间的区别在于您在转换公式中使用了两个不同的Y

【讨论】:

  • 感谢您的回答。现在图像质量更好,颜色也更好。最后一个问题是我在窗口上有两个比例不正确的图像。太拉长了。
  • 图片怎么样?并排?
  • 你能把图片贴在这里(小一点)吗?
【解决方案2】:

如果您正在为 Mac 编程,请查看最近在 OSX 10.9 甚至 10.10 中添加的 vImage 转换库。里面的东西真的很震撼。我正在做自己的 24 位到 32 位的转换,并将其磨练到大约 6 毫秒/帧 (1920x1080)。 15X以上的vImage及时吹出水面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多