天天看点

用opencv + vs2013来打开计算机摄像头

前几天用java的JMF来打开摄像头,现在我用opencv来打开摄像头。下面是操作的具体细节

1.下载和安装opencv

在官网opencv.org  下载   OpenCV windows版下载下来。(我下载的是opencv-3.1.0.exe),下载后安装自动解压,选择安装位置就行了。

2.配置环境变量

  计算机 > 右键属性> 高级系统设置 >  环境变量>  系统变量

Path 下添加opencv 的路径  如:…… opencv\build\x64\vc12\bin;

Opencv 3.1.0 版本只有x64位的,这里的vc12 = vs2013 ,根据自己安装的vs版本来选择

3.工程包含目录配置

打开vs 2013 ,文件>新建>项目  > visual C++   >Win32 控制台应用程序

用opencv + vs2013来打开计算机摄像头

点击刚才新建的项目右键 >  添加>  新建项

用opencv + vs2013来打开计算机摄像头

在视图 >其他窗口> 打开属性管理器

用opencv + vs2013来打开计算机摄像头

点击项目->Debug|Win32->Microsoft.Cpp.Win32.User(右键属性,或者双击)即可打开属性页面。

打开属性页面后,就是一番配置了。首先是在

一.通用属性 > VC++目录  >  包含目录 

添加opencv安装目录中的... \opencv\bulid\include

二.  通用属性  > VC++目录  > 库目录

添加   ....opencv\build\x64\vc10\lib

三. 通用属性  > 链接器 > 输入 >附加的依赖项

opencv_world310d.lib   

如果编译时出现; 模块计算机类型“X86”与目标计算机类型“x64”冲突

解决办法:

点击项目右键 >  属性 > 把平台选为X64> 配置管理器 > 活动解决方案平台 选X64  (没有就新建)> 然后在连接器 >高级  > 目标计算机 (MachineX64 )

配置完有时候需要重启计算机才生效

下面是打开摄像头的代码:

整体思路:

1)添加包含文件opencv

2)创建对象,获取视频流

3)创建窗口,把获取的视频流显示出来

4)如果关闭,就释放获取视频流的对象

#include <opencv2\core\core.hpp>

#include <opencv2\highgui\highgui.hpp>

#include <opencv2\opencv.hpp>

using namespace cv;//命名空间

int main()

{

    VideoCapture capture(0);//创建VideoCapture对象

    if (!capture.isOpened())//判断是否打开摄像头,打开isOpened返回ture

        return 1;

    bool stop(false);//定义一个用来停止循环的变量

    Mat frame;//用来存放读取的视频序列,承载每一帧的图像 ,Mat类是用于保存图像以及其他矩阵数据的数据结构

    namedWindow("Camera");//创建一个窗口,显示每一帧的窗口

    while (!stop)

    {

        if (!capture.read(frame))//如果没有读取到就中断

        {

            break;

        }

        imshow("Camera", frame);//正常显示,把获取的视频填充到窗口中

        char c = cvWaitKey(33);

        if (c == 32)break; //使用空格键来停止ASCII 为32

    }

    capture.release();//释放

}

对于JMF  和opencv 来打开摄像头,这两个操作方法我都尝试过,对于二者我说说自己的一些想法,在没有做这个项目的时候,我认为很简单的,但事实好像不是这样,因为没有头绪,一切都是在网上找的资料,找了很多资料,又发现很多用不了,那个时候才感觉困难重重。但是还好我还是找到了解决方法。二者的环境安装配置都是比较麻烦的。我是这样认为的。对于JMF来说opencv感觉更不错,代码简洁更清晰。

继续阅读