前言:
Qt5.15.2作为当前开源的最后5系列版本,虽然还有不少bug,但在嵌入式等方向,还大有用处,本次示例先从获取摄像头的帧开始,仅使用Qt的库
一、新建Qt工程
编译系统使用qmake
qt5.15.2的套件都可以使用
二、修改工程文件
在pro文件中,加入多媒体模块
QT += multimedia multimediawidgets
三、绘制测试UI
这是笔者已绘制的UI
四、关键代码
//初始化下拉择选项框
const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
ui->comboBox->blockSignals(true);
for (const QCameraInfo &cameraInfo : cameras) {
qDebug()<<cameraInfo.deviceName()<<cameraInfo.description();
ui->comboBox->addItem(cameraInfo.description(), cameraInfo.deviceName());
}
ui->comboBox->blockSignals(false);
//初始化摄像头
m_camera = new QCamera(QCameraInfo::defaultCamera());
connect(m_camera, &QCamera::errorOccurred, [this](){
qDebug()<< "camera error occurred"<<this->m_camera->errorString();
});
m_camera->setViewfinder(ui->videowidget);
五、运行程序
点击开始或切换摄像头,就可以看到预览画面
示例源码下载
后记:
本示例笔者是在win10系统下进行的,其他平台可能会有一些差异
本示例仅是一测试程序,实际使用时,可能会遇到一些问题,请读者自行解决
也有读者要问,为什么不直接使用第三方库呢?笔者承认,不少第三方库,如opencv会很轻松打开摄像头,但需要引入第三方库。一方面,直接使用Qt库,就不用再引入库了;另一方面,opencv摄像头的唯一ID可能要自己做了,而Qt已经做好了
注:
1.当摄像头被其他程序占用时,Qt无法打开
2.当多个摄像头接入同一USB总线上时,若流量太大,可能无法同时打开多个摄像头