关于内存中的图像使用OPENCV方式显示有关问题,来高手帮忙!

关于内存中的图像使用OPENCV方式显示问题,来高手帮忙!~
我从网络摄像机读取视频流,数据存储在char *pbuffer里,我想使用OPENCV的方式显示,使用下面方法显示的是灰度图像,怎么显示彩色图像呢?(单通道和三通道的方法都试过,三通道显示的也是灰度的图,读出来发现R==G==B)
我的方法:
IplImage * Img=cvCreateImage(cvSize(nWidth,nHeight),IPL_DEPTH_8U,1);  
Img->pBuffer = new char [nWidth * nHeight]; 
memcpy(Img->pBuffer,pbuffer,nYSize);
cvShowImage("img",Img);
------最佳解决方案--------------------
引用:
引用:
参考OpenCV\modules\highgui\src\cap_v4l.cpp


谢谢您的回答,不过T_YV12不是该文章说提到的V4L2格式

如果highgui不原生支持,恐怕暂时只能自己写格式转换相关代码了。
------其他解决方案--------------------
参考OpenCV\modules\highgui\src\cap_v4l.cpp

------其他解决方案--------------------
IplImage * Img=cvCreateImage(cvSize(nWidth,nHeight),IPL_DEPTH_8U,1);   
改为
IplImage * Img=cvCreateImage(cvSize(nWidth,nHeight),IPL_DEPTH_8U,3);   
再试试?

cvCreateImage
创建头并分配数据 

IplImage* cvCreateImage( CvSize size, int depth, int channels );
size 
图像宽、高. 
depth 
图像元素的位深度,可以是下面的其中之一: 
IPL_DEPTH_8U - 无符号8位整型 
IPL_DEPTH_8S - 有符号8位整型 
IPL_DEPTH_16U - 无符号16位整型 
IPL_DEPTH_16S - 有符号16位整型 
IPL_DEPTH_32S - 有符号32位整型 
IPL_DEPTH_32F - 单精度浮点数 
IPL_DEPTH_64F - 双精度浮点数 
channels 
每个元素(像素)的颜色通道数量.可以是 1, 2, 3 或 4.通道是交叉存取的,例如通常的彩色图像数据排列是: 
b0 g0 r0 b1 g1 r1 ... 
虽然通常 IPL 图象格式可以存贮非交叉存取的图像,并且一些OpenCV 也能处理他, 但是这个函数只能创建交叉存取图像. 
函数 cvCreateImage 创建头并分配数据,这个函数是下列的缩写型式 

header = cvCreateImageHeader(size,depth,channels);
cvCreateData(header); //只是创建空间,并不会初始化空间内的数据

------其他解决方案--------------------
前提是确认pbuffer里面的原始数据是彩色而不是灰度的。
------其他解决方案--------------------
该不会你摄像头驱动临时设置为灰度模式了吧。
为什么不直接用
capture=cvCaptureFromCAM(...
IplImage* iplImg=cvQueryFrame(capture);


------其他解决方案--------------------
不知道用cvCaptureFromCAM能不能直接操作网络摄像机。
------其他解决方案--------------------
得调哪个api,楼主搜搜吧
------其他解决方案--------------------
引用:
该不会你摄像头驱动临时设置为灰度模式了吧。
为什么不直接用
capture=cvCaptureFromCAM(...
IplImage* iplImg=cvQueryFrame(capture);


我的是网络摄像机,不需要驱动,只需要IP,登录名,密码,端口号这些,我用正常SDK的方法可以显示,可我需要使用OPENCV进行处理,现在读到OPENCV中直接变成灰度图了,没法取像素
------其他解决方案--------------------
引用:
不知道用cvCaptureFromCAM能不能直接操作网络摄像机。


SORRY,下午想回复您,但服务器升级,一直点不了
您说的方法不可取,cvCaptureFromCAM是从本机读取驱动的方式,网络相机驱动是不存在本机的,所以您的方法不能用,而且我也试过,我机器不光连着网络摄像机,同时也连着USB相机,您说的方法只能调取USB相机
------其他解决方案--------------------
我先写下我取内容的流程的吧,
海康网络相机初始化
->NET_DVR_RealPlay_V30()播放
->g_RealDataCallBack_V30()启动回调
->PlayM4_SetDecCallBack分析数据
->DecCBFun截取视频流(回调↓)
void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize, FRAME_INFO * pFrameInfo,  long nReserved1,long)