Opencv读取摄像头及视频相关

来源:互联网 发布:linux 新建log文件 编辑:程序博客网 时间:2024/06/07 01:38

以下是一个简单的程序:

#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;using namespace std;int main(int argc,char**argv){    VideoCapture capture(0);//从摄像头读入视频                        //若要读取视频只需将0改成视频地址    if(!capture.isOpened())//判断是否读入视频    {    cout<<"NO!"<<endl;    return -1;    }    while(1)    {        Mat frame;//用于存放每一帧图像        capture>>frame;//获取摄像头或者视频给的当前帧        imshow("camera",frame);        int c=waitKey(30);//大概是为啦和没帧所占时间持平        if(c==27)break;    }    capture.release();//释放摄像机或者视频    return 0;}

VideoCapture类属于videoio的子模块。当创建对象后要用一个判断预计来判断是否读取成功。
检查是否读取视频文件名或者摄像头可以用isOpened()。
>>可以抓住每个帧,capture>>frame可以理解位摄像机一张图片一张图片的给frame,每新来一张就会覆盖原来的(毕竟图像的格式大小都是完全一致的)
waitKey(30):这里面的30我猜测应该是默认视频位30帧每秒,那么1000ms/30大概就是30毫秒的样子。所以这能保证视频按照原来的流畅进行并且你的按键都会被捕捉到吧..I guess.
27是键盘上Esc的ASCII码,当按下Esc可以终止。
OpenCV实例讲解中对release有如下说法(虽然我开始没加release也没出什么问题):如果不这么做,RAM内存会全部消耗掉。所以还是高大尚的加上好一些哇。 release函数还可以释放矩阵。
以上大概~是读取摄像头或者视频的基本操作啦,对视频的操作其实就是对每一帧图像的操作,所以当你想对视频简单操作时,可以先找几张图片操作成功后代码复制到循环中的适当位置应该就可以啦。

原创粉丝点击