opencv3-摄像头的使用

大致把自己在这一部分的思路和遇到的问题记录一下

所说的视频帧就是按序列排放的一组图像,这些图像通过一定的间隔进行排序,也就是帧率,把它们组合起来就是动态的视频了。

接下来就开始介绍opencv中读取USB摄像头和本地视频文件

想要打开USB摄像头,就要指定ID号,也就是0.以上两种读取大致的流程是:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
       
       
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std ;
using namespace cv ;

int main ( int argc , char ** argv )
{
//打开第一个摄像头
//VideoCapture cap(0);
//打开视频文件
//VideoCapture cap ( "video.avi" );
//检查是否成功打开
if ( ! cap . isOpened ())
{
cout << "Can not open a camera or file." << endl ;
return - 1 ;
}
//获取帧率
double rate=capture.get(CV_CAP_PROP_FPS);
cout<<"rate:"<<rate<<endl;
bool stop(false);
namedWindow("camera frame");
Mat edges ;
//创建窗口
namedWindow ( "edges" , 1 );

while(!stop)
{
Mat frame ;
//从 cap 中读一帧,存到 frame
cap >> frame ;
//判断frame是否为空
if (! frame . empty ()){

//将读到的图像转为灰度图
cvtColor ( frame , edges , CV_BGR2GRAY );
//进行边缘提取操作
GaussianBlur(edges,edges,Size(5,5),1.5,1.5);
Canny ( edges , edges , 0 , 30 , 3 );
//显示结果
imshow ( "result" , edges );
}
//等待 30 秒,如果按键则推出循环
if ( waitKey ( 30 ) >= 0 )
break ;

//退出时会自动释放 cap 中占用资源
return 0 ;
}

打开摄像机有两种方式,一种在定义类时,一种是open()方法
VideoCapture *cap("h.avi");

or

cap.open("h.avi");

获取视频帧:
//方法1
cap.read(frame);
//方法2
cap.grab();
cap.retrieve(frame);
//方法3
cap>>frame;
视频里有比图像更多的信息,可以获取视频的帧率、帧数、尺寸、格式等。这些信息都可以使用get方法获取到。
double rate=cap.get(CV_CAP_PROP_FPS);

long nFrame=static_cast<long>(cap.get(CV_CAP_PROP_FRAME_COUNT));
相对应的还有set方法,其可以设置视频的帧率、亮度,还可以设置特定的位置和帧数读取视频。

isOpened函数用来检测VideoCapture类是否把摄像头打开。

在进行USB摄像头读取中遇到的问题:





解决办法是调用imshow、cvtColor时要加一条判断不为空的语句。

对于opencv之前的版本,有的使用的是cvCaptureFromCAM(0),我一直没有成功使用过这个。
都是在程序中把上面那个失败的函数改为cvCreateCameraCapture(0),之后的处理流程就跟上面贴出的代码处理流程类似了,只是函数的使用书写方式不同。
希望能给大家一点小小的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值