ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt6调用摄像头并显示画面

2022-04-03 00:02:51  阅读:411  来源: 互联网

标签:Qt6 调用 Camera camera ui include my 摄像头


前言

最近下了个Qt6.2.4,想弄个摄像头程序玩,发现网上摄像头相关资料大多都是5+版本甚至是4+版本,而Qt在6+版本中在摄像头方面进行了大改,官方给的教程又大而杂,一言难尽。经过两天折磨总算是知道如何实现最基本的摄像头调用了。
转载请注明超链接出处。

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手册。

源代码

main.cpp

#include <QApplication>//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

//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设计界面类关系如图所示

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

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

标签:Qt6,调用,Camera,camera,ui,include,my,摄像头
来源: https://www.cnblogs.com/icysamon/p/16094880.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有