前几天用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 控制台应用程序
点击刚才新建的项目右键 > 添加> 新建项
在视图 >其他窗口> 打开属性管理器
点击项目->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感觉更不错,代码简洁更清晰。