- 头文件
#include <opencv2/opencv.hpp>
using namespace cv;
- 打开摄像头
/*
Windows:
0 笔记本自带摄像头
1 是 第一个usb摄像头
Linux可填 /dev/video0
*/
//方式一:
VideoCapture m_cap(0);
//方式二:
VideoCapture m_cap;
m_cap.open(0);
- 打开本地视频文件
方式一:
VideoCapture m_cap("test.mp4");
方式二:
VideoCapture m_cap;
m_cap.open("test.mp4");
- 打开网络流
方式一:
VideoCapture m_cap("rtsp:://xxxx/stream");
方式二:
VideoCapture m_cap;
m_cap.open("rstp:://xxxx/stream");
- 判断是否打开成功
m_cap.isOpened()
- 读取一帧画像
Mat frame;
方式一:
m_cap.read(frame);
方式二:
m_cap >> frame;
- 判断是否读到末尾
frame.empty();
- 释放资源
m_cap.release();
示例代码:
cpp
//放到线程执行
VideoCapture m_cap;
m_cap.open(0);
Mat frame;
while(m_cap.read(frame)){
cv::flip(frame, frame, 1);
cvtColor(frame, frame, COLOR_BGR2RGB);
QImage img = QImage((const unsigned char*)frame.data, frame.cols, frame.rows, static_cast<int>(frame.step), QImage::Format_RGB888));
emit sendImg(img);
QThread::msleep(33); // 控制帧率,防止CPU占有率过高
}
// UI线程
ui->lable->setPixmap(QPixmap::fromImage(img));
-
获取视频属性 .get(propid)
cap.get(CAP_PROP_FRAME_WIDTH); // 宽度
cap.get(CAP_PROP_FRAME_HEIGHT); // 高度
cap.get(CAP_PROP_FPS); // 帧率
cap.get(CAP_PROP_FRAME_COUNT); // 总帧数(视频文件)
cap.get(CAP_PROP_POS_FRAMES); // 当前帧号 -
设置摄像头参数 .set(propId, value)
// 设置分辨率 640*480
cap.set(CAP_PROP_FRAME_WIDTH, 640);
cap.set(CAP_PROP_FRAME_HEIGHT, 480);
// 设置帧率
cap.set(CAP_PROP_FPS, 30);