如何从摄像头读取数据? 请问如何才能从usb摄像头取得其数据? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大部分是一样的。用一个AVCapture的控件就可以采集图像了 Yes, use the AVCapture ActiveX! 用directShow建图。sdk中有例子。 最简单的办法也许是使用media encoder,你可以下载一个media encoder9来看看就知道了 DXSDK\Samples\C++\DirectShow\Capture\AMCap www.vctop.comif (mb_color) { unsigned char * ired; unsigned char * igreen; unsigned char * iblue; // 循环变量 LONG i; LONG j; unsigned char tem; for (i=0,j=0;i<(long)lpVData->dwBufferLength;i=i+3,j++) { ired= lpVData->lpData+ i+2; igreen = lpVData->lpData+i+1; iblue = lpVData->lpData+ i; tem=(unsigned char)(0.299*(*ired)+0.587*(*igreen)+0.114*(*iblue)); *ired=tem; *igreen=tem; *iblue=tem; } /* DWORD dwsize = capGetVideoFormatSize(ghCapWnd); BITMAPINFO * psVideoFormat = (LPBITMAPINFO) new BYTE[dwsize]; //得到格式 DWORD ret = capGetVideoFormat(ghCapWnd, psVideoFormat, dwsize); if (ret != 0) { //宽度 psVideoFormat->bmiHeader.biWidth; //高度 psVideoFormat->bmiHeader.biHeight; //位平面数 psVideoFormat->bmiHeader.biPlanes; //像素比特数 psVideoFormat->bmiHeader.biBitCount; //压缩格式 psVideoFormat->bmiHeader.biCompression,(LPSTR) &(psVideoFormat->bmiHeader.biCompression); //图像大小 psVideoFormat->bmiHeader.biSizeImage; } // 图像宽度 LONG lWidth; // 图像高度 LONG lHeight; // 获取图像宽度 lWidth = psVideoFormat->bmiHeader.biHeight;//::DIBWidth(lpDIB); // 获取图像高度 lHeight = psVideoFormat->bmiHeader.biHeight;//::DIBHeight(lpDIB); */ return 1; } http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1311 用vfw采集的话, 使用capSetCallbackOnVideoStream设置回调, 那么在回调函数中就会取得一帧帧的图象数据(未压缩, 无论是否设定了视频压缩格式), 其形式是VIDEOHDR* ,使用capSetCallbackOnWaveStream设置回调, 在音频回调中会获得压缩过的音频数据(压缩格式由你设定), 其形式是WAVEHDR*更好的办法是使用dshow做采集, 从video capture filter传递下来的数据就是图象数据, 可以在输入Pin的 IMemInputPin::Receive中获取, 其形式是IMediaSample * 求教!函数接口调用 单片机和电脑串口通信的问题 一个项目相关知识 关于本机IP地址的问题 有没办法禁止掉所有热键? 急!!!!!!!!!!!!!11 请教关于ACTIVEX控件的界面菜鸟集问题 有些基类没法加载! windows媒体播放机火焰的效果的可视化实现 如何获得模态对话框的指针 关于CSocket的,有点疑惑,请指点。 用类向导生成的对话框类,为何不能在该向导中找出来??
if (mb_color)
{
unsigned char * ired;
unsigned char * igreen;
unsigned char * iblue;
// 循环变量
LONG i;
LONG j;
unsigned char tem;
for (i=0,j=0;i<(long)lpVData->dwBufferLength;i=i+3,j++)
{
ired= lpVData->lpData+ i+2;
igreen = lpVData->lpData+i+1;
iblue = lpVData->lpData+ i;
tem=(unsigned char)(0.299*(*ired)+0.587*(*igreen)+0.114*(*iblue));
*ired=tem;
*igreen=tem;
*iblue=tem;
}
/*
DWORD dwsize = capGetVideoFormatSize(ghCapWnd);
BITMAPINFO * psVideoFormat = (LPBITMAPINFO) new BYTE[dwsize];
//得到格式
DWORD ret = capGetVideoFormat(ghCapWnd, psVideoFormat, dwsize);
if (ret != 0)
{
//宽度
psVideoFormat->bmiHeader.biWidth;
//高度
psVideoFormat->bmiHeader.biHeight;
//位平面数
psVideoFormat->bmiHeader.biPlanes;
//像素比特数
psVideoFormat->bmiHeader.biBitCount;
//压缩格式
psVideoFormat->bmiHeader.biCompression,(LPSTR) &(psVideoFormat->bmiHeader.biCompression);
//图像大小
psVideoFormat->bmiHeader.biSizeImage;
}
// 图像宽度
LONG lWidth;
// 图像高度
LONG lHeight;
// 获取图像宽度
lWidth = psVideoFormat->bmiHeader.biHeight;//::DIBWidth(lpDIB);
// 获取图像高度
lHeight = psVideoFormat->bmiHeader.biHeight;//::DIBHeight(lpDIB);
*/
return 1;
}
使用capSetCallbackOnWaveStream设置回调, 在音频回调中会获得压缩过的音频数据(压缩格式由你设定), 其形式是WAVEHDR*更好的办法是使用dshow做采集, 从video capture filter传递下来的数据就是图象数据, 可以在输入Pin的 IMemInputPin::Receive中获取, 其形式是IMediaSample *