本人买了一个USB摄像头, 想把摄像头的实时画面调入到我的MFC多文档程序的视图中显示,请教大家,该怎么做,需要哪方面的知识,需要哪些大致的步骤。关键是最快,最省力。
 

解决方案 »

  1.   

    用DirectShow吧,或者更老的VFW SDK都可以实现,你可以去找相关的例子看看。http://www.vckbase.com/document/viewdoc/?id=1130
      

  2.   

    opencv 只要几句就行了。但是vc安装和配置opencv要花半小时左右。不过实际开发最好用DirectShow。
    下面有个例子,做了其它处理,代码有点长了。
    http://www.opencv.org.cn/index.php/%E8%AF%BB%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%E5%92%8C%E8%BF%90%E5%8A%A8%E7%89%A9%E4%BD%93%E6%A3%80%E6%B5%8B
      

  3.   

    用OpenCV吧,方便简单
    安装照着这个就差不多了
    1.安装OpenCV 1.0 
    可以到 http://www.opencv.org.cn/下载最新的OpenCV 程序。 
    按照默认选项安装就可以。在安装时选择“将<…>\OpenCV\bin加入系统变量”(Add<...>\OpenCV\bin to the systerm PATH),否则需要在“我的电脑”“属性”“高级”“环境变量”中添加上述变量,如:变量:Path,值:C:\OpenCV\bin;(<…>为OpenCV的安装根目录,建议将openCV安装在C盘的OpenCV目录下) 
    2.*打开OpenCV安装目录下的_make文件夹,启动其中的opencv.dsw工程(如: C:\OpenCV\_make\opencv.dsw);进行批构建(batch build),注意只选择 Win32 debug和Win32 release就可以了。 
    在生成过程中可能会出现如下错误: 
    “fatal error LNK1181: 无法打开输入文件“cvauxd.lib” 
    “error C2039: “foreground_regions” : 不是“CvFGDStatModel”的成员” 
    解决的方法是:在“FileView”中打开“cvaux”项目的包含文件中(Include\External)的cvaux. h文件,找到上述foreground_regions成员,会发现此成员已被注释掉了,只要将其上一行末尾的“/”改为“*/”使该成员可见,再次启动项目,应该就可以编译通过了。 
    *启动_make目录下的另外一个工程“opencv_directshow.dsw” ,使其编译通过; 
    3.在VC的工程中加入如下库文件和包含文件:  
        在工具选项中选择目录 切换目录下拉至Library files 添加以下路径 C:\OpenCV\lib切换目    录下拉至Include files 添加以下路径  
    C:\OpenCV\cv\include 
    C:\OpenCV\otherlibs\highgui 
    C:\OpenCV\cxcore\include 
    C:\OpenCV\otherlibs\cvcam\include 
    4.在项目中运用OpenCV 
        首先新建工程 ,然后 在project - settings -all configurations (工程-选项-设置全部)中选择 Link,在对象/库模块中加入静态库cv.lib highgui.lib cvaux.lib cxcore.lib cvcam.lib 
    ****注意在1.0中库文件没有版本号; 
        最后在项目的头文件中加入所用到的包含文件,如:
    #include “cv.h”  
    #include “highgui.h” (一般来说这两个文件是必要的,其它头文件在用到时可自行加入) 使用的话就:
    CvCapture *capture; // 捕获的设定参量
    IplImage *frame; // 一帧的图片参量
    capture = cvCaptureFromCAM(0);
    frame = cvQueryFrame(capture);//-------这个就是每一帧的数据了,需要的时候调出来就行// 将数据绘制到图片控件上
    void DrawPicToHDC(UINT ID)
    {
    CDC *pDC = GetDlgItem(ID)->GetDC(); 
    HDC hDC= pDC->GetSafeHdc(); 
    CRect rect; 
    GetDlgItem(ID)->GetClientRect(&rect); 
    CvvImage cimg;  cimg.CopyOf(frame); 
    cimg.DrawToHDC(hDC,&rect);  ReleaseDC(pDC); 
    }加个定时程序,每隔一段时间就显示一下就可以
      

  4.   

    装个directX sdk里面有个 testcap例子,直接用即可
      

  5.   

    我也在用opencv,不过opencv获取图像有点慢,要是对帧频要求高的话,建议使用DirectShow,opencv里也可以加载DirectShow,具体看opencv论坛吧。
      

  6.   

    ds比较难学,个人感觉,vfw比较方便,不过功能太少,自己看吧