转自 http://blog.sina.com.cn/s/blog_69fe22cb0100uxy3.html
一、准备工作
这里我用到的平台是 MicrosoftVisual Studio 2008 和OpenCV2.2
OpenCV2.2下载地址http://www.opencv.org.cn/index.php/Download。安装OpenCV2.2,假定安装目录为:D:ProgramFilesOpenCV2.2
CMake下载地址 http://www.cmake.org/cmake/resources/software.html (选择Win32 Installer 安装版本)。
二、编译OpenCV
1. 用CMake导出VC++ 项目文件
■ 运行cmake-gui,设置路径为OpenCV安装路径(例如:D:\Program Files\OpenCV2.2),并创建子目录D:\Program Files\OpenCV2.2\vc2008,用于存放编译结果。
■ 然后点 configure,在弹出的对话框内选择 Visual Studio 9 2008。
■ Microsoft Visual Studio 2008正式版支持OpenMP,所以ENABLE_OPENMP这个选项要勾上;如果是Express版本,则不支持OpenMP,所以需要取消ENABLE_OPENMP选项。
■ 最后再点击Generate。
2. 编译OpenCV Debug 和 Release版本库
完成上一步骤后,将在D:\ProgramFiles\OpenCV2.2\vc2008目录下生成OpenCV.sln的VC Solution File,请用VC++ 2008Express打开OpenCV.sln,然后执行如下操作:
■在Debug下,选择Solution Explorer里的 Solution OpenCV,点右键,运行"RebuildSolution";如编译无错误,再选择INSTALL项目,运行"Build"。
■在Release下,选择Solution Explorer里的 Solution OpenCV,点右键,运行"RebuildSolution";如编译无错误,再选择INSTALL项目,运行"Build"。
此时,OpenCV的*d.dll文件(for debug)和*.dll文件(forrelease)将出现在D:\ProgramFiles\OpenCV2.2\vc2008\bin目录中;OpenCV的*d.lib文件(for debug)和*.lib文件(for release)将出现在D:\ProgramFiles\OpenCV2.2\vc2008\lib目录;头文件*.h出现在D:\ProgramFiles\OpenCV2.2\vc2008\include\opencv中。
至此MicrosoftVisual Studio 2008 调用的OpenCV动态库生成完毕。
三、配置Windows环境变量Path
将D:\ProgramFiles\OpenCV2.2\vc2008\bin加入Windows系统环境变量Path中。
加入后,必须注销当前用户或者重新启动才能生效。
四、为Microsoft Visual Studio 2008配置OpenCV环境
打开Microsoft Visual Studio2008,菜单 Tools -> Options -> Projectsand Solutions -> VC++ Directories。
■ Show directoriesfor选择include files,加入目录 D:\ProgramFiles\OpenCV2.2\vc2008\include\opencv
■ Show directoriesfor选择library files,加入目录 D:\ProgramFiles\OpenCV2.2\vc2008\lib
五、使用OpenCV 2.2编程
以后每创建一个OpenCV 的Win32控制台程序,都需要添加依赖的库
■ 选择Solution Explorer里的“项目名称”,点击鼠标右键,选择Properties;
■为项目的Debug配置增加依赖的库:opencv_core220d.libopencv_highgui220d.lib opencv_video220d.lib opencv_ml220d.libopencv_legacy220d.lib opencv_imgproc220d.lib
■为项目的Release配置增加依赖的库:使用OpenCV 2.2编程
- 打开VC++ 2008 ,创建一个Win32控制台程序opencvhello;
- 选择Solution Explorer里的opencvhello项目,点击鼠标右键,选择Properties;
- 为项目的Debug配置增加依赖的库:opencv_core220d.libopencv_highgui220d.lib opencv_video220d.lib opencv_ml220d.libopencv_legacy220d.lib opencv_imgproc220d.lib
- 为项目的Release配置增加依赖的库:opencv_core220d.libopencv_highgui220d.lib opencv_video220d.lib opencv_ml220d.libopencv_legacy220d.lib opencv_imgproc220d.lib
- 编译运行下面的例程
-
#include<cv.h>
#include<cxcore.h>
#include<highgui.h>
int main( int argc, char** argv )
{
//声明IplImage指针
IplImage* pFrame = NULL;
//获取摄像头
CvCapture* pCapture =cvCreateCameraCapture(-1);
//创建窗口
cvNamedWindow("video", 1);
//显示视屏
while(1)
{
pFrame=cvQueryFrame( pCapture );
if(!pFrame)break;
cvShowImage("video",pFrame);
char c=cvWaitKey(33);
if(c==27)break;
}
cvReleaseCapture(&pCapture);
cvDestroyWindow("video");
}
点击看大图
点击看大图
点击看大图
点击看大图
#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main( int argc, char** argv )
{
}
其中必须说一下几个函数用分割线框起来了
具体是这样的:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cvCreateCameraCapture
初始化从摄像头中获取视频
CvCapture* cvCreateCameraCapture( int index );
-
index
- 要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。
函数cvCreateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。目前在Windows下可使用两种接口:Video for Windows(VFW)和Matrox Imaging Library(MIL);Linux下也有两种接口:V4L和FireWire(IEEE1394)。
释放这个结构,使用函数cvReleaseCapture。
返回值为一个
CvCapture
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CvCapture
视频获取结构
typedef struct CvCapture CvCapture;
结构CvCapture没有公共接口,它只能被用来作为视频获取函数的一个参数。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
这个是一个很重要的结构
然后的工作就是把视屏显示出来
while(1)
在这里解释一下为什么显示视屏的时候要循环
进入While循环之后 开始读入视屏文件
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cvQueryFrame函数
从摄像头或者文件中抓取并返回一帧
IplImage* cvQueryFrame( CvCapture* capture );
-
capture
- 视频获取结构。
函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。抓取后,capture被指向下一帧,可用cvSetCaptureProperty调整capture到合适的帧。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如果抓取帧为空
否则将抓取的那一帧显示在创建的窗口上
cvShowImage("video",pFrame);
当前帧显示后
char c=cvWaitKey(33);
if(c==27)break;
我们等待33ms
如果用户触发了按键,将按键的ASCII值给C
如果C为ESC(ASCII 为27)循环退出
最后释放capture 和window
最后释放占用资源
注意笔记本自带的摄像头可以打开,但是不能显示图像,USB的可以,如果以后有了解决方法我会及时公布。也希望知道的朋友可以说一下!