溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Qt6如何實(shí)現(xiàn)調(diào)用攝像頭并顯示畫(huà)面

發(fā)布時(shí)間:2023-02-24 13:46:42 來(lái)源:億速云 閱讀:220 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“Qt6如何實(shí)現(xiàn)調(diào)用攝像頭并顯示畫(huà)面”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Qt6如何實(shí)現(xiàn)調(diào)用攝像頭并顯示畫(huà)面”吧!

1、Cmake環(huán)境

CmakeLists.txt添加

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt6 COMPONENTS Multimedia REQUIRED)
find_package(Qt6 COMPONENTS MultimediaWidgets REQUIRED)
 
target_link_libraries(samon1 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(samon1 PRIVATE Qt6::Multimedia)
target_link_libraries(samon1 PRIVATE Qt6::MultimediaWidgets)
set_target_properties(samon1 PROPERTIES

這個(gè)samon1是我工程目錄的文件名,具體請(qǐng)根據(jù)自己的工程目錄名和CmakeLists配置而定。

文件調(diào)用記得修改名稱

set(PROJECT_SOURCES
        main.cpp
        camera.cpp
        camera.h
        camera.ui
)

qmake編譯環(huán)境請(qǐng)自行根據(jù)調(diào)用頭文件查找Qt手冊(cè)。

2、源代碼

main.cpp

#include <QApplication>//Qt必要頭文件
 
#include "camera.h"//攝像頭
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);//Qt初始化
 
    Camera w;//創(chuàng)建窗口類
    w.setWindowTitle("Camera");//設(shè)置窗口標(biāo)題
    w.show();//顯示窗口
 
    return a.exec();//程序結(jié)束
}

camera.cpp

#include "camera.h"//攝像頭
#include "./ui_camera.h"//CMakeLists.txt構(gòu)建后產(chǎn)生文件
 
Camera::Camera(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::Camera)
{
    ui->setupUi(this);
 
    //qDebug("Camera Device Check:%d",Camera::checkCameraAvailability());//攝像頭驅(qū)動(dòng)檢測(cè)debug測(cè)試
 
    my_camera.reset(new QCamera(QMediaDevices::defaultVideoInput()));//新建并設(shè)置攝像頭使用默認(rèn)驅(qū)動(dòng)
    my_captureSession.setCamera(my_camera.data());//捕獲攝像頭畫(huà)面
    my_captureSession.setVideoOutput(ui->viewfinder);//設(shè)置捕捉畫(huà)面顯示窗口
    my_camera->start();//啟動(dòng)攝像頭
 
}
 
 
//檢測(cè)攝像頭驅(qū)動(dòng)能否識(shí)別
bool Camera::checkCameraAvailability()
{
    if (QMediaDevices::videoInputs().count() > 0)
        return true;//檢測(cè)到攝像頭驅(qū)動(dòng)
    else
        return false;//沒(méi)有檢測(cè)到攝像頭驅(qū)動(dòng)
}
 
//消類
Camera::~Camera()
{
    delete ui;
}

camera.h

//icysamon@outlook.com
 
#ifndef CAMERA_H
#define CAMERA_H
 
#include <QMainWindow>
#include <QCamera>
#include <QVideoWidget>
#include <QMediaCaptureSession>
#include <QMediaDevices>
#include <QImageCapture>
#include <QMediaRecorder>
 
 
QT_BEGIN_NAMESPACE
namespace Ui { class Camera; }
QT_END_NAMESPACE
 
 
class Camera : public QMainWindow
{
    Q_OBJECT
 
public:
    Camera(QWidget *parent = nullptr);
    ~Camera();
 
private:
    Ui::Camera *ui;
    QScopedPointer<QCamera> my_camera;
    QScopedPointer<QMediaRecorder> my_mediaRecorder;
    QMediaCaptureSession my_captureSession;
 
    bool checkCameraAvailability(void);
 
};
#endif // CAMERA_H

camera.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Camera</class>
 <widget class="QMainWindow" name="Camera">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>762</width>
    <height>567</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QVideoWidget" name="viewfinder"/>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>762</width>
     <height>26</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <customwidgets>
  <customwidget>
   <class>QVideoWidget</class>
   <extends>QWidget</extends>
   <header location="global">qvideowidget.h</header>
   <container>1</container>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

ui設(shè)計(jì)界面類關(guān)系如圖所示

Qt6如何實(shí)現(xiàn)調(diào)用攝像頭并顯示畫(huà)面

  • 以QMainWindow為父類建立子類Camera

  • 以QVedioWidget為父類建立子類viewfinder

最后編譯運(yùn)行,就能實(shí)現(xiàn)一個(gè)純視頻的窗口,有關(guān)攝像頭程序的截屏涉及個(gè)人隱私,故不做展示。

感謝各位的閱讀,以上就是“Qt6如何實(shí)現(xiàn)調(diào)用攝像頭并顯示畫(huà)面”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Qt6如何實(shí)現(xiàn)調(diào)用攝像頭并顯示畫(huà)面這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI