Qt--使用电脑的摄像头拍摄图片

搜集了一些网上的资料,写下过程,关于如何使用电脑的摄像头采集图片

创建工程,在.pro文件中要加上下面一些内容:

QT       += core gui multimedia multimediawidgets

在.h文件中要加上以下几个头文件:

#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QFileDialog>

在类中包含的槽函数:

    void displayImage(int, QImage image);

在类中包含的私有成员:

    //系统摄像部分
    QCamera *camera;
    //摄像取景部分
    QCameraViewfinder *CameraViewfinder;
    //截图部件
    QCameraImageCapture *CameraImageCapture;
    //要保存的图像
    QImage saveImage;

在.cpp中,构造函数加上以下内容(imageview为Horizontal Layout控件):

    camera = new QCamera();
    CameraViewfinder = new QCameraViewfinder(this);
    CameraImageCapture = new QCameraImageCapture(camera);

    ui->imageview->addWidget(CameraViewfinder);
    //缩放其内容以填充所有可用空间,这里暂时用不到
    //ui->labelimage->setScaledContents(true);
    ui->labelimage->setAlignment(Qt::AlignCenter);
    //设置label填充灰色颜色
    ui->labelimage->setBackgroundRole(QPalette::Dark);
    ui->labelimage->setAutoFillBackground(true);
    //设置显示窗口
    camera->setViewfinder(CameraViewfinder);
    //启动摄像头
    camera->start();

    connect(CameraImageCapture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(displayImage(int,QImage)));

编写在label显示图片槽函数:

void MainWindow::displayImage(int,QImage image)
{
    saveImage = image;
    //设置图像在label上显示,保持原始图像的比例,且平滑的转换图像(Qt::FastTransformation可能会产生锯齿)
    ui->labelimage->setPixmap(QPixmap::fromImage(image).scaled(ui->labelimage->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
    ui->statusBar->showMessage(tr("capture OK!"),5000);
}

编写保存按钮槽函数:

void MainWindow::on_ButtonSave_clicked()
{
    if(saveImage.isNull()){
        ui->statusBar->showMessage(tr("no image need save!"),2000);
    }else{
        QString filename = QFileDialog::getSaveFileName(this,tr("save file"),QDir::currentPath(),tr("JPG(*.jpg *.JPEG);;"
                                                                                                    "PNG(*.png);;PPM(*.ppm);;"
                                                                                                    "XBM(*.xbm);;XPM(*.xpm)"));
        if(filename.isEmpty()){
            ui->statusBar->showMessage(tr("save cancel"),2000);
        }else{
            saveImage.save(filename);
        }
    }
}

编写采集相片槽函数:

void MainWindow::on_ButtonCapture_clicked()
{
    ui->statusBar->showMessage(tr("capturing..."),200);
    CameraImageCapture->capture();
}

编写退出按钮:

void MainWindow::on_ButtonQuit_clicked()
{
    camera->stop();
    close();
}

效果图:

Qt--使用电脑的摄像头拍摄图片



追加一些额外的内容,设置窗口的图标:

    //设置图标
    setWindowIcon(QIcon(":/ico/1.png"));