YUY2转RGB(或BGR)

//YUY2视频转化RGB格式
inline void YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,int dwSize)  
{  
    //B = 1.164(Y - 16)         + 2.018(U - 128)  
    //G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)  
    //R = 1.164(Y - 16) + 1.596(V - 128)  
    BYTE *orgRGBbuff = RGBbuff;  
    for(int count=0;count<dwSize;count+=4)  
    {  
        //Y0 U0 Y1 V0  
        float Y0 = *YUY2buff;  
        float U = *(++YUY2buff);  
        float Y1 = *(++YUY2buff);  
        float V = *(++YUY2buff);  
        ++YUY2buff;  
        *(RGBbuff) =   (BYTE)(Y0 + (1.370705 * (V-128)));            
        *(++RGBbuff) = (BYTE)(Y0 - (0.698001 * (V-128)) - (0.337633 * (U-128)));    
        *(++RGBbuff) = (BYTE)(Y0 + (1.732446 * (U-128)));          
        *(++RGBbuff) = (BYTE)(Y1 + (1.370705 * (V-128)));            
        *(++RGBbuff) = (BYTE)(Y1 - (0.698001 * (V-128)) - (0.337633 * (U-128)));    
        *(++RGBbuff) = (BYTE)(Y1 + (1.732446 * (U-128)));          
        ++RGBbuff;  
    }  
}


采集摄像头的数据为YUY2格式,OpenCV支持的RGB格式,因此,需要将YUY2转换为RGB格式,再将RGB转换为OpenCV支持的BGR格式,最后就可以显示啦

int  CameraShow(BYTE* pData, int len)
{
    //change them to rgb
    Mat rgb(m_stCameraParam.vHeight,m_stCameraParam.vWidth, CV_8UC3 );

    YUY2_RGB(pData, rgb.data, len); // 

    Mat bgr;
    cv::cvtColor(rgb, bgr, CV_RGB2BGR); // RGB转换为BGR

    /*显示画面*/
    CRect rect(656, 38, 908, 360);

    IplImage* iplimg = NULL;
    iplimg = &IplImage(bgr);
    if (NULL == iplimg)   {
        return 0;
    }

    assert(NULL != iplimg);
    CvvImage m_CvvImage;
    m_CvvImage.CopyOf(iplimg, 1);	

    HDC hdc =  ::GetWindowDC(m_hWnd);

    m_CvvImage.DrawToHDC(hdc, rect); 

    ::ReleaseDC(m_hWnd, hdc);

    return  0;

}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值