Qt6實現(xiàn)調(diào)用攝像頭并顯示畫面
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
這個samon1是我工程目錄的文件名,具體請根據(jù)自己的工程目錄名和CmakeLists配置而定。
文件調(diào)用記得修改名稱
set(PROJECT_SOURCES
main.cpp
camera.cpp
camera.h
camera.ui
)
qmake編譯環(huán)境請自行根據(jù)調(diào)用頭文件查找Qt手冊。
2、源代碼
main.cpp
#include <QApplication>//Qt必要頭文件
#include "camera.h"http://攝像頭
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"http://攝像頭
#include "./ui_camera.h"http://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ū)動檢測debug測試
my_camera.reset(new QCamera(QMediaDevices::defaultVideoInput()));//新建并設(shè)置攝像頭使用默認(rèn)驅(qū)動
my_captureSession.setCamera(my_camera.data());//捕獲攝像頭畫面
my_captureSession.setVideoOutput(ui->viewfinder);//設(shè)置捕捉畫面顯示窗口
my_camera->start();//啟動攝像頭
}
//檢測攝像頭驅(qū)動能否識別
bool Camera::checkCameraAvailability()
{
if (QMediaDevices::videoInputs().count() > 0)
return true;//檢測到攝像頭驅(qū)動
else
return false;//沒有檢測到攝像頭驅(qū)動
}
//消類
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è)計界面類關(guān)系如圖所示

- 以QMainWindow為父類建立子類Camera
- 以QVedioWidget為父類建立子類viewfinder
最后編譯運行,就能實現(xiàn)一個純視頻的窗口,有關(guān)攝像頭程序的截屏涉及個人隱私,故不做展示。
到此這篇關(guān)于Qt6實現(xiàn)調(diào)用攝像頭并顯示畫面的文章就介紹到這了,更多相關(guān)Qt調(diào)用攝像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C語言中symlink()函數(shù)和readlink()函數(shù)的使用
這篇文章主要介紹了詳解C語言中symlink()函數(shù)和readlink()函數(shù)的使用,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09
C++實現(xiàn)Matlab的zp2tf函數(shù)的示例代碼
matlab?的?zp2tf?函數(shù)的作用是將極點形式的?H(s)?函數(shù)的分母展開,本文主要為大家介紹了C++實現(xiàn)Matlab的zp2tf函數(shù)示例代碼,需要的可以參考一下2023-04-04
c/c++ 標(biāo)準(zhǔn)庫 bind 函數(shù)詳解
bind是一組用于函數(shù)綁定的模板。在對某個函數(shù)進(jìn)行綁定時,可以指定部分參數(shù)或全部參數(shù),也可以不指定任何參數(shù),還可以調(diào)整各個參數(shù)間的順序。這篇文章主要介紹了c/c++ 標(biāo)準(zhǔn)庫 bind 函數(shù) ,需要的朋友可以參考下2018-09-09
C語言 數(shù)據(jù)結(jié)構(gòu)雙向鏈表簡單實例
這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構(gòu)雙向鏈表簡單實例的相關(guān)資料,需要的朋友可以參考下2017-03-03

