OpenCV + VS2008 配置及实例(打开摄像头)

转自 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。

OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)
OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)
OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)

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动态库生成完毕。

OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)


OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)

OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)

OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)

OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)

三、配置Windows环境变量Path
将D:\ProgramFiles\OpenCV2.2\vc2008\bin加入Windows系统环境变量Path中。
加入后,必须注销当前用户或者重新启动才能生效。
OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)

OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)

四、为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 <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)

OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)

五、使用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");

    }

点击看大图

Enlarge

点击看大图

点击看大图

Enlarge

点击看大图

点击看大图

Enlarge

点击看大图

点击看大图

Enlarge

点击看大图

OpenCV <wbr>+ <wbr>VS2008 <wbr>配置及实例(打开摄像头)
程序解释

 

#include "stdafx.h"

#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");

}

其中必须说一下几个函数用分割线框起来了

具体是这样的:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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)
  {
     pFrame=cvQueryFrame( pCapture );
     if(!pFrame)break;
     cvShowImage("video",pFrame);
     char c=cvWaitKey(33);
     if(c==27)break;
  }

在这里解释一下为什么显示视屏的时候要循环

进入While循环之后 开始读入视屏文件

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

cvQueryFrame函数

从摄像头或者文件中抓取并返回一帧


IplImage* cvQueryFrame( CvCapture* capture );

capture 
视频获取结构。

函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。抓取后,capture被指向下一帧,可用cvSetCaptureProperty调整capture到合适的帧。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

如果抓取帧为空  break 打破循环

否则将抓取的那一帧显示在创建的窗口上

cvShowImage("video",pFrame);

当前帧显示后

char c=cvWaitKey(33);
if(c==27)break;

我们等待33ms

如果用户触发了按键,将按键的ASCII值给C

如果C为ESC(ASCII 为27)循环退出

最后释放capture 和window

 cvReleaseCapture(&pCapture);
  cvDestroyWindow("video");

最后释放占用资源

注意笔记本自带的摄像头可以打开,但是不能显示图像,USB的可以,如果以后有了解决方法我会及时公布。也希望知道的朋友可以说一下!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值