1.1访问摄像头或者读取图片和视频流:
在OpenCV中,通过cv::VideoCapture对象的open()方法可访问摄像头或者相机设备。
VideoCapture初始化:
bool VideoCapture::open(const string& filename)//开视频文件
bool VideoCapture::open(int device) //开摄像头
bool VideoWriter::isOpened() //若初始化成功返回true,失败返回false
imread与imshow:
Mat cv::imread ( const String & filename, int flags = IMREAD_COLOR )
参数1 filename, 读取的图片文件名,可以使用相对路径或者绝对路径,但必须带完整的文件扩展名(图片格式后缀)
参数2 flags, 一个读取标记,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关
void imshow(const string& winname, InputArray mat);
参数1 winname,生成的窗口的名称
参数2 mat 懂的都懂
void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE) //新建一个窗口
参数1:新建的窗口的名称。自己随便取。
参数2:窗口的标识,一般默认为WINDOW_AUTOSIZE 。
WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。(上面图1就是使用的它)
WINDOW_NORMAL 用户可以改变这个窗口大小(上面图2就是使用的它)
WINDOW_OPENGL 窗口创建的时候会支持OpenGL
int cv::waitKey ( int delay = 0 ) //等待一个按键,等待的时间取决于参数,0则无限等待,返回按键的ASCII值
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void main(int argc,char *argv[]){
auto cameraNumber = 0;
if(argc > 1){
cameraNumber = atoi(argv[1]);
}
//这里尝试去打开摄像头设备
VideoCapture camera;
camera.open(cameraNumber);
if(!camera.isOpened()){
cerr<<"ERROR : cannot open the camera"<<endl;
exit(1);
}
//设置摄像头的分辨率 640 * 480
camera.set(CV_CAP_PROP_FRAME_WIDTH,640);
camera.set(CV_CAP_PROP_FRAME_HEIGHT,480);
}
由于版本变量的更名,若使用CV_CAP_PROP_FRAME_WIDTH发生报错,则去掉前面的CV_即可。