柚子快報(bào)激活碼778899分享:QT調(diào)用攝像頭實(shí)現(xiàn)拍照功能
柚子快報(bào)激活碼778899分享:QT調(diào)用攝像頭實(shí)現(xiàn)拍照功能
文件配置
創(chuàng)建項(xiàng)目后
配置文件是.pro文件
首先在Qt中調(diào)用攝像頭功能,通常會(huì)使用Qt Multimedia模塊中的QCamera類(lèi)。所以需要導(dǎo)入這個(gè)模塊,這個(gè)模塊在較新版本的Qt中是直接支持的,但你可能需要確保你的Qt環(huán)境已經(jīng)包含了Multimedia模塊。此外,你還需要確保你的操作系統(tǒng)支持?jǐn)z像頭,并且攝像頭已經(jīng)被正確安裝和驅(qū)動(dòng)。我使用的QT版本是5.14.2。
在Qt中調(diào)用攝像頭功能時(shí),Multimediawidgets模塊也是一個(gè)重要的部分,特別是當(dāng)你需要顯示攝像頭捕捉到的視頻流時(shí)。Multimediawidgets模塊提供了QCameraViewfinder類(lèi),這個(gè)類(lèi)用于顯示攝像頭的實(shí)時(shí)視頻預(yù)覽。因?yàn)槲覀儠?huì)在后面講攝像頭拍攝內(nèi)容做一個(gè)實(shí)時(shí)預(yù)覽,所以添加Multimediawidgets。
UI界面
我這里只是顯示攝像頭的實(shí)時(shí)預(yù)覽和一個(gè)拍攝功能。
Qwidget是用來(lái)顯示實(shí)時(shí)檢測(cè)的視頻畫(huà)面;
textEdit是顯示可調(diào)用的攝像頭的設(shè)備名稱(chēng);
pushbutton是實(shí)現(xiàn)取幀拍照功能的實(shí)現(xiàn)。
代碼文件
1.頭文件
導(dǎo)入我們會(huì)用到的類(lèi)
#include
#include
#include
在Qt中,當(dāng)想要使用攝像頭進(jìn)行視頻預(yù)覽和圖像捕捉時(shí),你會(huì)用到QCamera、QCameraViewfinder和QCameraImageCapture這幾個(gè)類(lèi)。
QCamera
QCamera類(lèi)提供了對(duì)攝像頭設(shè)備的訪問(wèn)。可以使用它來(lái)啟動(dòng)和停止視頻捕捉,以及配置攝像頭的各種參數(shù)(如分辨率、幀率等)。
QCameraViewfinder
QCameraViewfinder類(lèi)是一個(gè)小部件,用于顯示來(lái)自攝像頭的實(shí)時(shí)視頻流。它是QCamera的視圖查找器,你需要將它與QCamera實(shí)例關(guān)聯(lián)起來(lái),以便在UI中顯示視頻預(yù)覽。
QCameraImageCapture
QCameraImageCapture類(lèi)提供了從攝像頭捕捉靜態(tài)圖像的功能。你可以使用它來(lái)設(shè)置圖像捕捉的參數(shù)(如分辨率、格式等),并處理圖像捕捉事件(如捕捉完成)。
我們需要定義這些類(lèi)的私有成員變量。
示例代碼
QCamera *ca;
QCameraImageCapture *capture;
我們還需要pushbutton的槽函數(shù)聲明,這里可以直接在ui界面選中控件轉(zhuǎn)到槽函數(shù),會(huì)自動(dòng)在頭文件中添加聲明。
整體的頭文件代碼如下: ?
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QCamera *ca;
QCameraImageCapture *capture;
};
#endif // MAINWINDOW_H
2.源文件
在源文件中主要包含兩部分內(nèi)容一個(gè)是設(shè)備的訪問(wèn)于ui控件的連接,還有就是我們實(shí)現(xiàn)靜態(tài)圖像捕獲的功能函數(shù)的實(shí)現(xiàn)。
首先也是導(dǎo)入一些我們需要的類(lèi)
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include
#include
#include
QCameraInfo類(lèi)是Qt Multimedia模塊的一部分,用于查詢(xún)系統(tǒng)當(dāng)前可用的相機(jī)設(shè)備信息。它提供了一系列靜態(tài)函數(shù)和方法,允許開(kāi)發(fā)者檢測(cè)并獲取有關(guān)系統(tǒng)上安裝的攝像頭設(shè)備的信息。
這個(gè)類(lèi)的導(dǎo)入是因?yàn)槲疫€添加了一個(gè)textEdit的控件,是為了顯示訪問(wèn)到的設(shè)備信息,因?yàn)檫@里調(diào)用攝像頭設(shè)備,可能是外接的設(shè)備,代碼中我使用的infos.value的索引是1,如果使用的是內(nèi)置的比如筆記本自帶的攝像頭一般默認(rèn)索引為0,也可以去電腦設(shè)備信息中進(jìn)行查詢(xún)。
ui->setupUi(this);
QList
qDebug() << infos.value(1).deviceName() << ";" << infos.value(0).description(); // 打印第一個(gè)攝像頭的設(shè)備名和描述
QString camera = infos.value(1).deviceName(); // 獲取第一個(gè)攝像頭的設(shè)備名
qDebug() << camera; // 打印設(shè)備名
ui->textEdit->setText(QString("設(shè)備信息:").arg(camera));
ca = new QCamera(camera.toUtf8(), this); // 嘗試創(chuàng)建一個(gè)QCamera對(duì)象,但這里有一個(gè)問(wèn)題
QCameraViewfinder *v2 = new QCameraViewfinder(ui->camare); // 嘗試將 QCameraViewfinder 設(shè)置為某個(gè) QWidget 的子控件
v2->resize(ui->camare->size()); // 嘗試調(diào)整 QCameraViewfinder 的大小,同樣因?yàn)?ui->camare 可能無(wú)效而有問(wèn)題
ca->setViewfinder(v2); // 將 QCameraViewfinder 設(shè)置為 QCamera 的視圖查找器
v2->show(); // 顯示 QCameraViewfinder,但通常如果它是某個(gè)已顯示 QWidget 的子控件,則不需要顯式調(diào)用 show()
ca->start(); // 啟動(dòng)攝像頭
功能函數(shù)的定義,ui界面轉(zhuǎn)到槽的時(shí)候源文件會(huì)自動(dòng)定義空的功能函數(shù)的實(shí)現(xiàn),只需要添加內(nèi)容就行。
capture = new QCameraImageCapture(ca); 創(chuàng)建一個(gè)QCameraImageCapture對(duì)象,該對(duì)象與先前創(chuàng)建的QCamera對(duì)象ca相關(guān)聯(lián)。 ? 所有通過(guò)capture對(duì)象進(jìn)行的圖像捕獲操作都將使用ca攝像頭。 ?
capture->capture("D:\\qt xiangmu\\photo.jpg");?嘗試使用capture對(duì)象捕獲一張圖像,并將其保存到指定的文件路徑中。這里的路徑被我硬編碼為"D:\\qt xiangmu\\photo.jpg"。更換自己的路徑。
QMessageBox::information(this, "good", "good");顯示一個(gè)消息框,向用戶(hù)顯示信息“good”。 ? 這與圖像捕獲操作是獨(dú)立的,它會(huì)在捕獲操作啟動(dòng)后立即執(zhí)行,而不管捕獲操作是否成功。 ?
void MainWindow::on_pushButton_clicked()
{
capture = new QCameraImageCapture(ca);
capture->capture("D:\\qt xiangmu\\photo.jpg");
QMessageBox::information(this,"good","good");
}
效果展示
柚子快報(bào)激活碼778899分享:QT調(diào)用攝像頭實(shí)現(xiàn)拍照功能
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。