Qt6实现调用摄像头并显示画面

1、Cmake环境

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是我工程目录的文件名,具体请根据自己的工程目录名和CmakeLists配置而定。

文件调用记得修改名称

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

qmake编译环境请自行根据调用头文件查找Qt手册。

2、源代码

main.cpp

#include //Qt必要头文件
 
#include "camera.h"//摄像头
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);//Qt初始化
 
    Camera w;//创建窗口类
    w.setWindowTitle("Camera");//设置窗口标题
    w.show();//显示窗口
 
    return a.exec();//程序结束
}

camera.cpp

#include "camera.h"//摄像头
#include "./ui_camera.h"//CMakeLists.txt构建后产生文件
 
Camera::Camera(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::Camera)
{
    ui->setupUi(this);
 
    //qDebug("Camera Device Check:%d",Camera::checkCameraAvailability());//摄像头驱动检测debug测试
 
    my_camera.reset(new QCamera(QMediaDevices::defaultVideoInput()));//新建并设置摄像头使用默认驱动
    my_captureSession.setCamera(my_camera.data());//捕获摄像头画面
    my_captureSession.setVideoOutput(ui->viewfinder);//设置捕捉画面显示窗口
    my_camera->start();//启动摄像头
 
}
 
 
//检测摄像头驱动能否识别
bool Camera::checkCameraAvailability()
{
    if (QMediaDevices::videoInputs().count() > 0)
        return true;//检测到摄像头驱动
    else
        return false;//没有检测到摄像头驱动
}
 
//消类
Camera::~Camera()
{
    delete ui;
}

camera.h

//[email protected]
 
#ifndef CAMERA_H
#define CAMERA_H
 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
 
 
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 my_camera;
    QScopedPointer my_mediaRecorder;
    QMediaCaptureSession my_captureSession;
 
    bool checkCameraAvailability(void);
 
};
#endif // CAMERA_H 

camera.ui


 Camera
 
  
   
    0
    0
    762
    567
   
  
  
   MainWindow
  
  
  
   
    
     0
     0
     762
     26
    
   
  
  
 
 
  
   QVideoWidget
   QWidget
   
qvideowidget.h
1

ui设计界面类关系如图所示

Qt6实现调用摄像头并显示画面_第1张图片

  • 以QMainWindow为父类建立子类Camera
  • 以QVedioWidget为父类建立子类viewfinder

最后编译运行,就能实现一个纯视频的窗口,有关摄像头程序的截屏涉及个人隐私,故不做展示。

到此这篇关于Qt6实现调用摄像头并显示画面的文章就介绍到这了,更多相关Qt调用摄像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(Qt6实现调用摄像头并显示画面)