【QT】qt操作摄像头

先上效果图

左上角显示摄像头下拉选项,右上角分别是打开摄像头、关闭摄像头、截图保存的功能,左下显示摄像头内容,右下显示截图图片

如何实现?

1、在工程文件中添加,QT += multimedia (多媒体),QT += multimediawidgets

2、主要用到的部件

3、获取摄像头信息

    //读取所有摄像头信息
    QList<QCameraInfo> infos = QCameraInfo::availableCameras();
    foreach(QCameraInfo info, infos){
        qDebug()<<info.description()<<info.deviceName();
        ui->comboBox->addItem(info.deviceName());
    }

4、打开摄像头

QCameraViewfinder *vf;//摄像头取景器部件
void Camera::on_openCamera_clicked()
{
    myCamera = new QCamera(ui->comboBox->currentText().toUtf8(), this);
    //创建一个获取图片对象
    cp = new QCameraImageCapture(myCamera);
    //抓取图片的信号
    connect(cp, &QCameraImageCapture::imageCaptured,this, &Camera::save_pic);

#if 0
    QVideoWidget *w = new QVideoWidget(ui->widget);
    w->resize(ui->widget->size());
    myCamera->setViewfinder(w);
    w->show();

#else
    vf = new QCameraViewfinder(ui->widget);
    vf->resize(ui->widget->size());
    myCamera->setViewfinder(vf);
    vf->show();

#endif
    myCamera->start();
}

5、关闭摄像头

void Camera::on_closeCamera_clicked()
{
    myCamera->stop();
    vf->close();
}

6、抓拍     QCameraImageCapture

QCameraImageCapture *cp;//抓拍部件
关联槽函数  connect(cp, &QCameraImageCapture::imageCaptured,this, &Camera::save_pic);//抓取图片的信号 
void Camera::on_captureBt_clicked()
{
    //抓取一帧数据
    cp->capture("./m.jpg");
}

//保存图片槽函数
void Camera::save_pic(int id, const QImage &preview)
{
   qDebug()<<id;
   QPixmap mmp = QPixmap::fromImage(preview);
   mmp = mmp.scaled(ui->label_dis->size());
   ui->label_dis->setPixmap(mmp);
}
发布了64 篇原创文章 · 获赞 82 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_40602000/article/details/98875026