matlab yuy2转rgb,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

{

//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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值