opencv的VideoCapture类下的.open方法只能通过摄像头的序号来打开摄像头,所以原理也是通过序号来打开摄像头,只是提供一种将摄像头的名称与其对应的序号关联起来的方法。
#include <QMediaDevices>
#include <QCameraDevice>
// 获取视频输入设备列表
QList<QCameraDevice> videoDevices = QMediaDevices::videoInputs();
// 遍历设备列表,输出设备名
for (const QCameraDevice &device : videoDevices)
{
qDebug() << "Camera name:" << device.description();
ui->comboBox->addItem(device.description()); // 添加摄像头名称到comboBox
}
int capnum = 0; // 摄像头对应序号
for(int i = 0; i < videoDevices.size(); i++)
{
if(videoDevices.at(i).description() == ui->comboBox->currentText()) //依据名称打开摄像头
{
capnum = i; // 找到对应序号
}
}
if (!cap.open(capnum))
{
//qDebug() << "Failed to open camera";
QMessageBox::critical(this, tr("Error"), tr("Failed to open cap"));
return;
}