15.3.2 远程摄像头--OpenCV安装配置
受监控方程序启动后,会主动连接监控服务方,当连接成功后就不断地获取摄像头图像数据,再将每帧图像数据转为JPG格式的图片数据,该图片数据会通过网络传送到监控服务方。该服务方接收到受监控方摄像头数据后,就把它们直观地显示在界面上。下面就具体介绍如何采用开源的OpenCV来获取这些图像数据。
(1)从http://www.opencv.org.cn上下载OpenCV安装程序,假如将该程序安装到C:\Program Files\OpenCV中,在安装时就需要选择"将\OpenCV\bin加入系统变量(Add<…> \OpenCV\bin to the systerm PATH)"项,如图15.9和图15.10所示。
|
| (点击查看大图)图15.9 OpenCV安装 |
|
| (点击查看大图)图15.10 OpenCV安装 |
(2)配置Windows环境变量。检查C:\Program Files\OpenCV\bin是否已经被加入到环境变量PATH中(如果没有,则加入),再注销当前Windows用户(或重启),还需要重新登录该环境变量才能生效。也可以在任务管理器中重启explorer.exe,如图15.11所示。
|
| 图15.11 配置Windows环境变量 |
(3)配置VC++(www.cppentry.com)工程包含选项。在VC++(www.cppentry.com) 6.0主界面上选择Tools|Options命令,弹出Options对话框。在其中选择Directories选项卡,在Show directories for下拉列表框中选择Library files列表项;在Directories列表框中填入如下路径:
- C:\Program Files\OpenCV\lib
(4)在Directories选项卡下的Show directories for下拉列表框中选择Include files列表项;在Directories列表框中填入如下路径,如图15.12所示。
- C:\Program Files\OpenCV\cxcore\include
- C:\Program Files\OpenCV\cv\include
- C:\Program Files\OpenCV\cvaux\include
- C:\Program Files\OpenCV\ml\include
- C:\Program Files\OpenCV\otherlibs\highgui
- C:\Program Files\OpenCV\otherlibs\cvcam\include
(5)在Directories选项卡的Show directories for下拉列表框中选择Source files列表项;在Directories列表框中填入如下路径: - C:\Program Files\OpenCV\cv\src
- C:\Program Files\OpenCV\cxcore\src
- C:\Program Files\OpenCV\cvaux\src
- C:\Program Files\OpenCV\otherlibs\highgui
- C:\Program Files\OpenCV\otherlibs\cvcam\src\windows
连接lib库,每创建一个需要使用OpenCV的VC Project,都要为它指定所需的lib库。
(6)在VC++(www.cppentry.com) 6.0的主界面上选择Project|Settings命令,弹出Project Settings对话框。在其左上方的Settings for下拉列表框中选择All Configurations项;再选择右上方的Link选项卡,在Object/library modules文本框中添加cxcore.lib cv.lib ml.lib highgui.lib cvaux.lib cvcam.lib项,如图15.13所示
|
| 图15.12 工程配置 |
|
| 图15.13 连接OpenCV lib库 |
HighGUI类用于获取摄像头图像数据,其主要的函数如下所示。
CvCapture *cvCreateCameraCapture(int index)函数用于初始化视频摄像头。其参数Index需要使用摄像头索引。如果只要一个摄像头或者使用哪个都可以时,那么设置该参数为-1,函数就会返回NULL。
void cvReleaseCapture(CvCapture** capture)函数释放分配的CvCapture结构。其参数capture是上一个函数返回的CvCapture指针。
IplImage* cvQueryFrame(CvCapture* capture)函数从摄像头返回一帧。其参数capture也是第一个函数返回的CvCapture指针。该函数如果没有视频帧则返回NULL,否则返回IplImage*指向摄像头视频图像的指针。