qt6使用opencv根据摄像头名称打开摄像头

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;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux操作系统下,我们可以使用QtOpenCV库来打开摄像头Qt提供了一个图形界面框架,而OpenCV则提供了一个计算机视觉框架,两者结合可以方便地实现打开摄像头的操作。 首先,在Qt中可以使用QCamera类来调用摄像头。我们需要在Qt项目中添加multimedia模块,然后使用如下代码来打开摄像头: ``` QCamera *camera = new QCamera; QCameraViewfinder *viewfinder = new QCameraViewfinder; camera->setViewfinder(viewfinder); viewfinder->show(); camera->start(); ``` 这段代码会创建一个QCamera对象,然后将其连接到QCameraViewfinder对象上,最后启动摄像头。 接下来,在OpenCV中我们可以使用VideoCapture类来读取摄像头的数据。我们需要在OpenCV项目中添加opencv_videoio模块,然后使用如下代码来打开摄像头: ``` VideoCapture cap(0); if(cap.isOpened()){ namedWindow("camera", CV_WINDOW_AUTOSIZE); while(true){ Mat frame; cap >> frame; imshow("camera", frame); if(waitKey(30) >= 0) break; } } ``` 这段代码会创建一个VideoCapture对象并将其连接到ID为0的摄像头上,然后进入一个循环读取并显示图像的过程。我们可以使用imshow函数来将每一帧数据呈现在窗口中,waitKey函数用于等待一段时间以等待用户输入。 将QtOpenCV结合起来,可以使用QImage将OpenCV的Mat对象转换为Qt的图像对象,然后在Qt界面中显示。具体实现可以参考Qt+OpenCV官方文档或者网络上的相关教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值