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();
}
效果图:
追加一些额外的内容,设置窗口的图标:
//设置图标
setWindowIcon(QIcon(":/ico/1.png"));