Qt用QCamera操作摄像头-实现预览拍照

该文章介绍了如何在Qt环境中使用QCamera库来开启和操作摄像头。首先在项目配置中添加多媒体支持,然后通过QCameraInfo获取可用的摄像头列表,选择一个摄像头实例化QCamera对象,并设置QCameraViewfinder用于实时预览,同时利用QCameraImageCapture进行图像捕获。最后,调整相关设置启动摄像头。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qt有专门用于开启摄像头的库,使用方式如下:
一,先在项目工程文件pro中添加模块

QT += multimedia multimediawidgets

二,再在头文件包含一下头文件:

#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QCameraInfo>

并添加摄像头相关的成员指针

    QCamera *m_camera = nullptr;
    QCameraImageCapture *m_imageCapture = nullptr;
    QCameraViewfinder *m_viewFinder = nullptr;

三,函数实现打开摄像头功能
界面上添加QLabel标签labelCamera,用于摄像头开启预览;

void MainWindow::on_btOpen_clicked()
{
    QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
    for(const QCameraInfo &cameraInfo : cameras)
    {
        qDebug() << "CameraInfo:" << cameraInfo;
    }
    if(cameras.size() < 1)
    {
        QMessageBox::information(NULL, "title", "No Camera!!!", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
        return;
    }
    if(m_camera == nullptr)
        m_camera = new QCamera(cameras[cameras.size()-1], this); // 摄像头对象

    if(m_viewFinder == nullptr)
        m_viewFinder = new QCameraViewfinder(ui->labelCamera); // 用于实时显示摄像头图像
    // 使 viewfinder 能够使用 QSS
    m_viewFinder->setAttribute(Qt::WA_StyledBackground, true);
    m_viewFinder->resize(ui->labelCamera->size());
    m_camera->setViewfinder(m_viewFinder); // camera 使用 viewfinder 实时显示图像

    m_camera->setCaptureMode(QCamera::CaptureStillImage);//将其采集为图片
    //m_camera->setCaptureMode(QCamera::CaptureMode::CaptureViewfinder);//将采集到取景器中
    m_camera->setViewfinder(m_viewFinder);
    m_viewFinder->show();
    m_camera->start();
    //ui->labelCamera->raise();//最上层
}

四,关闭摄像头

void MainWindow::on_btClose_clicked()
{
    if(nullptr != m_camera)
        m_camera->stop();
    if(nullptr != m_viewFinder)
        m_viewFinder->close();
}

五,拍照

void MainWindow::on_btPlay_clicked()
{
    QString  strFilePath = QCoreApplication::applicationDirPath();
    if(m_imageCapture == nullptr)
        m_imageCapture = new QCameraImageCapture(m_camera); // 用于截取摄像头图像

//    if (m_imageCapture->isCaptureDestinationSupported(QCameraImageCapture::CaptureToBuffer))
//    {
//        m_imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToBuffer);    //保存在缓存,自行保存到文件,避免卡顿
//    }
//    else
    {
       m_imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
    }
    m_camera->searchAndLock();
    QDateTime time = QDateTime::currentDateTime();
    QString strFileName = time.toString("yy-MM-dd hh-mm-ss");
    strFilePath += "/" + strFileName + ".jpg";
    m_imageCapture->capture(strFilePath);
    m_camera->unlock();

    QElapsedTimer t;
    t.start();
    while(t.elapsed()<20)
        QCoreApplication::processEvents();
    //QThread::sleep(1);
    QFileInfo fileInfo(strFilePath);
    if(!fileInfo.exists())
    {
        QMessageBox::information(NULL, "title", "Saving!!!", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    }

}

整个工程源码下载:
Qt操作摄像头源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵牛老人

码字不易,您的支持就是动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值