关于摄像头视频的问题 本人买了一个USB摄像头, 想把摄像头的实时画面调入到我的MFC多文档程序的视图中显示,请教大家,该怎么做,需要哪方面的知识,需要哪些大致的步骤。关键是最快,最省力。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用DirectShow吧,或者更老的VFW SDK都可以实现,你可以去找相关的例子看看。http://www.vckbase.com/document/viewdoc/?id=1130 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 用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); }加个定时程序,每隔一段时间就显示一下就可以 装个directX sdk里面有个 testcap例子,直接用即可 我也在用opencv,不过opencv获取图像有点慢,要是对帧频要求高的话,建议使用DirectShow,opencv里也可以加载DirectShow,具体看opencv论坛吧。 ds比较难学,个人感觉,vfw比较方便,不过功能太少,自己看吧 如果改变其他进程的资源 Windows Sockets网络编程 基于UDP 我要模拟鼠标点击5秒才放请问该怎么实现呢? 请问一个函数的作用 CreateFileMapping 懂正则表达式的来. 在CListCtrl控件中如何修改控件值?急急!!! 关于vc中添加新类的问题! 通过ado连接oracle数据库取字段值问题 有个16进制的数,但我要的是。 我快要疯了 编辑框 switch(iMessage)和switch(message)有什么区别?
下面有个例子,做了其它处理,代码有点长了。
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
安装照着这个就差不多了
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);
}加个定时程序,每隔一段时间就显示一下就可以