请问如何才能从usb摄像头取得其数据?

解决方案 »

  1.   

    大部分是一样的。用一个AVCapture的控件就可以采集图像了
      

  2.   

    Yes, use the AVCapture ActiveX!
      

  3.   

    用directShow建图。sdk中有例子。
      

  4.   

    最简单的办法也许是使用media encoder,你可以下载一个media encoder9来看看就知道了
      

  5.   

    DXSDK\Samples\C++\DirectShow\Capture\AMCap
      

  6.   

    www.vctop.com
    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;
    }
      

  7.   

    http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1311
      

  8.   

    用vfw采集的话, 使用capSetCallbackOnVideoStream设置回调, 那么在回调函数中就会取得一帧帧的图象数据(未压缩, 无论是否设定了视频压缩格式), 其形式是VIDEOHDR* ,
    使用capSetCallbackOnWaveStream设置回调, 在音频回调中会获得压缩过的音频数据(压缩格式由你设定), 其形式是WAVEHDR*更好的办法是使用dshow做采集, 从video capture filter传递下来的数据就是图象数据, 可以在输入Pin的 IMemInputPin::Receive中获取, 其形式是IMediaSample *