(h.263)如果你下载了VideoNet_src源代码,运行期间如果出现内存访问错误,调试后发现是ConvertRGB2YUV(long,long,unsigned char*,unsigned int yuv);内部出现的这个错误可以考虑是摄像头采集的视频颜色深度问题,这里要求是24位的深度,否则会出错.
转自:http://blog.csdn.net/skyair624/archive/2008/08/31/2855699.aspx
我笔记本上的摄像头采集的格式为YUY2类型的,所以就在ConvertRGB2YUV的地方出错,从网上找了个YUY2转换为YUV的代码,修改了下倒是可以了,不过还是有问题,正在修改中,YUY2转换为YUV的代码如下:
BOOL YUV422To420(BYTE* pYUV, BYTE* pY, BYTE* pU, BYTE* pV, LONG lWidth, LONG lHeight)
{
int i,j;
BYTE* pYUVTemp = pYUV;
BYTE* pYUVTempNext = pYUV+lWidth*2;
for(i=0; i<lHeight; i+=2)
{
for(j=0; j<lWidth; j+=2)
{
pY[j] = *pYUVTemp++;
pY[j+lWidth] = *pYUVTempNext++;
pU[j/2] =(*(pYUVTemp) + *(pYUVTempNext))/2;
pYUVTemp++;
pYUVTempNext++;
pY[j+1] = *pYUVTemp++;
pY[j+1+lWidth] = *pYUVTempNext++;
pV[j/2] =(*(pYUVTemp) + *(pYUVTempNext))/2;
pYUVTemp++;
pYUVTempNext++;
}
pYUVTemp+=lWidth*2;
pYUVTempNext+=lWidth*2;
pY+=lWidth*2;
pU+=lWidth/2;
pV+=lWidth/2;
}
return TRUE;
}
转自:http://topic.csdn.net/u/20080616/21/82e1a489-bed8-4626-8c73-1cea83a05cdb.html
转:YUY2(YUV) 与 RGB 格式图片的相互转换 以及 基于YUY2(YUV)的blending
http://www.zixundao.com/thread-630-1-1.html
YUV的几种格式
http://blog.csdn.net/byteman_wang/archive/2009/02/14/3890793.aspx
YUY2到YUV420的转换
http://hi.baidu.com/feibaoding/blog/item/7d40b0f49346d22cbd310948.html
VFW采集到视频帧时
1. 如果摄像头采用的是RGB24输出的时候,在buffer中RGB三分量的排列顺序是 [B0,G0,R0,B1,G1,R1....Bn,Gn,Rn] ,可以直接采用StretchDIBits来画图,但是在画图前必须填充BITMAPINFO 信息结构体。该结构体中的内容可以从 VFW函数库中capCaptureGetSetup函数来取得一部分信息。
2. 如果摄像头采用的是YUY2输出的话,因为StretchDIBits函数只能采用RGB的色彩空间,所以必须首先转换成RGB的数据。此时vfw回调所得buffer中的数据排列如下 [Y0 U0 Y1 V0 Y2 U1 Y3 V1] 转换函数如下
出处:http://blog.csdn.net/byteman_wang/archive/2009/02/12/3880570.aspx