Qt之QCamera的简单使用

文章目录

  • 一、相机操作相关示例
    • 1.摄像头操作内容使用示例
    • 2.摄像头信息展示使用示例
    • 3.摄像头设置切换、预览操作示例
  • 二、相机使用个人操作理解
    • 1.相机类支持信息获取
    • 2.相机类曝光、焦点、图像处理控制信息获取
    • 3.快速启动相机设置(各个设备处于理想状态)
  • 三、相机Demo源码
    • mainwindow.h
    • mainwindow.cpp
    • mainwindow.ui
  • 四、总结

一、相机操作相关示例

1.摄像头操作内容使用示例

下图演示流程如下

  1. 演示未打开摄像头时的拍摄提示
  2. 选择摄像头并打开
  3. 选择保存路径并查看保存路径(保证拍摄前无图)
  4. 点击拍摄并查看保存的图片
    请添加图片描述

2.摄像头信息展示使用示例

下图演示了通过相机对象相关函数获取的相关信息展示
请添加图片描述

3.摄像头设置切换、预览操作示例

下图演示流程如下

  1. 预览当前照片(查看新拍摄前的照片)
  2. 切换相机设置信息(从设置5切换到设置0)
  3. 点击就拍摄当前照片(包含Qt 5.9的图像)
  4. 点击预览包含Qt 5.9的图像
    请添加图片描述

二、相机使用个人操作理解

1.相机类支持信息获取

没错,相机对象启动后是可以查看相机的支持信息,相机可查看的支持信息包括支持的锁类型、支持的帧率范围、支持的像素格式、支持的分辨率已经支持的设置列表。
**注:**下方可传入一个取景器设置的函数将只匹配传入设置的已有配置,然后返回对应支持的配置列表;若传入设置为空则返回所有支持列表;使用相机前推荐先查看相机支持信息再继续使用

/*** @brief supportedLocks 返回相机支持的锁类型* @return 支持的锁类型*/QCamera::LockTypes supportedLocks() const;/*** @brief supportedViewfinderFrameRateRanges 返回相机支持的帧率范围列表* @param settings 要匹配的取景器设置* @return 可适配的帧率范围列表*/QList<QCamera::FrameRateRange> supportedViewfinderFrameRateRanges(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;/*** @brief supportedViewfinderPixelFormats 返回相机支持的像素格式列表* @param settings 要匹配的取景器设置* @return 可适配的像素格式列表*/QList<QVideoFrame::PixelFormat> supportedViewfinderPixelFormats(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;/*** @brief supportedViewfinderResolutions 返回相机支持的分辨率列表* @param settings 要匹配的取景器设置* @return 可适配的分辨率列表*/QList<QSize> supportedViewfinderResolutions(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;/*** @brief supportedViewfinderSettings 返回相机支持的取景器设置列表* @param settings 要匹配的取景器设置* @return 可适配的取景器设置列表*/QList<QCameraViewfinderSettings> supportedViewfinderSettings(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;

2.相机类曝光、焦点、图像处理控制信息获取

相机可通过一下函数获取相机对于的控制对象,但是获取的控制对象是const修饰符修饰的对象,所以获取的控制对象只能查看不能修改

    /*** @brief exposure 返回相机的曝光控制对象* @return 曝光对象控制对象*/QCameraExposure *exposure() const;/*** @brief focus 返回相机的焦点控制对象* @return 焦点控制对象*/QCameraFocus *focus() const;/*** @brief imageProcessing 返回相机图像处理控制对象* @return 图像处理控制对象*/QCameraImageProcessing *imageProcessing() const;

3.快速启动相机设置(各个设备处于理想状态)

下方代码为快速获取相机信息并启动相机的代码逻辑。

	// 创建相机显示控件QWidget *wgt = new QWidget;// 添加布局器wgt->setLayout(new QHBoxLayout);// 创建相机对象,并通过相机信息函数获取最后一个相机QCamera *camera = new QCamera(QCameraInfo::availableCameras().last());// 创建相机取景器对象QCameraViewfinder *viewFinder = new QCameraViewfinder(wgt);// 设置相机取景器到相机中camera->setViewfinder(viewFinder);// 将取景器添加到布局器中wgt->layout()->addWidget(viewFinder);// 显示控件wgt->show();// 启动相机camera->start();

三、相机Demo源码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QCameraViewfinder>
#include <QCameraInfo>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass QCamera;
class MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = nullptr);~MainWindow();/*** @brief initUi 初始化UI界面信息*/void initUi();/*** @brief initCamera 初始化相机信息*/void initCamera();/*** @brief updateCameraSupportInfo 更新相机支持信息*/void updateCameraSupportInfo();/*** @brief updateCameraSupportSettingsInfo 更新相机支持的设置信息*/void updateCameraSupportSettingsInfo();/*** @brief updateCameraSupportSettingsInfoBySetting 基于传入相机取景器设置对象的更新相机支持的设置信息* @param setting 传入相机取景器设置对象*/void updateCameraSupportSettingsInfoBySetting(const QCameraViewfinderSettings &setting);private slots:/*** @brief on_btnOpenCloseCamera_clicked 打开/关闭摄像头*/void on_btnOpenCamera_clicked();/*** @brief on_btnCaptureImg_clicked 拍照槽函数*/void on_btnCaptureImg_clicked();/*** @brief on_btnBaseInfo_clicked 展示基础信息*/void on_btnBaseInfo_clicked();/*** @brief on_btnExposureInfo_clicked 展示曝光信息*/void on_btnExposureInfo_clicked();/*** @brief on_btnCameraFocusInfo_clicked 展示相机焦点信息*/void on_btnCameraFocusInfo_clicked();/*** @brief on_btnImageProcessingInfo_clicked*/void on_btnImageProcessingInfo_clicked();/*** @brief on_btnUseCurrentSettings_clicked 使用当前设置信息*/void on_btnUseCurrentSettings_clicked();/*** @brief on_comboBoxSettings_currentIndexChanged 设置信息下拉框项更新槽函数* @param index 更新索引位置*/void on_comboBoxSettings_currentIndexChanged(int index);/*** @brief on_btnSelSavePath_clicked 选择图片保存路径*/void on_btnSelSavePath_clicked();/*** @brief on_btnPreviewImg_clicked 图片预览按钮* @param checked 按钮选中状态,预览状态*/void on_btnPreviewImg_clicked(bool checked);private:Ui::MainWindow *ui;QCamera                     *m_camera = Q_NULLPTR;  // 相机对象QCameraViewfinder           m_cameraViewfinder;     // 相机取景器对象QHash<QString, QCameraInfo> m_hashCameraInfos;      // 相机信息容器
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QCamera>
#include <QCameraInfo>
#include <QMessageBox>
#include <QDateTime>
#include <QFileDialog>
#include <QTimer>#include <QCameraFocus>
#include <QCameraExposure>
#include <QCameraImageCapture>
#include <QCameraImageProcessing>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow), m_camera(new QCamera(this))
{ui->setupUi(this);// 初始化ui界面initUi();// 初始化相机信息initCamera();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::initUi()
{// 默认显示预览窗口ui->stackedWidget->setCurrentIndex(1);// 添加相机取景器到布局器中ui->layoutCamera->addWidget(&m_cameraViewfinder);// 添加提示信息ui->btnBaseInfo->setToolTip(u8"相机对象可直接获取的信息");ui->btnExposureInfo->setToolTip(u8"相机曝光信息:使用相机对象通过exposure函数获取QCameraExposure对象中拿到的信息");ui->btnCameraFocusInfo->setToolTip(u8"相机聚焦信息:使用相机对象通过focus函数获取QCameraFocus对象中拿到的信息");ui->btnImageProcessingInfo->setToolTip(u8"相机图片处理信息:使用相机对象通过imageProcessing函数获取QCameraImageProcessing对象中拿到的信息");
}void MainWindow::initCamera()
{// 清空相机信息容器m_hashCameraInfos.clear();// 获取可用的相机信息容器const QList<QCameraInfo> &cameras = QCameraInfo::availableCameras();// 遍历可用相机信息容器,将相机信息存储并添加在相机信息下拉框中foreach (const QCameraInfo &cameraInfo, cameras) {m_hashCameraInfos[cameraInfo.description()] = cameraInfo;ui->comboBoxCameraInfo->addItem(cameraInfo.description());}// 未检测到相机的提示if(0 == ui->comboBoxCameraInfo->count()) {QMessageBox::information(this, u8"提示", u8"未检索到摄像头!");}
}void MainWindow::updateCameraSupportInfo()
{// 支持信息容器清空ui->textBrowserSupportInfo->clear();// 摄像头未启动提示if(QCamera::ActiveState != m_camera->state()) {QMessageBox::information(this, u8"提示", u8"摄像头未启动,无法获取支持信息");return;}//! 添加相机基础信息// 支持的锁定信息QString locksStr = u8"锁类型:";locksStr += QString("%1 ").arg(m_camera->supportedLocks());ui->textBrowserSupportInfo->append(locksStr);// 支持的帧率范围QString frameRateRangesStr = u8"帧率范围:";foreach(auto rangeInfo, m_camera->supportedViewfinderFrameRateRanges()) {frameRateRangesStr += QString("(%1, %2) ").arg(rangeInfo.minimumFrameRate).arg(rangeInfo.maximumFrameRate);}ui->textBrowserSupportInfo->append(frameRateRangesStr);// 支持的像素格式QString pixelFormatsStr = u8"像素格式:";foreach(auto pixelFormatInfo, m_camera->supportedViewfinderPixelFormats()) {pixelFormatsStr += QString("%1 ").arg(pixelFormatInfo);}ui->textBrowserSupportInfo->append(pixelFormatsStr);// 支持的分辨率QString resolutionsStr = u8"分辨率:";foreach(auto resolutionInfo, m_camera->supportedViewfinderResolutions()) {resolutionsStr += QString("(%1, %2) ").arg(resolutionInfo.width()).arg(resolutionInfo.height());}ui->textBrowserSupportInfo->append(resolutionsStr);
}void MainWindow::updateCameraSupportSettingsInfo()
{// 设置列表下拉框清空ui->comboBoxSettings->clear();if(QCamera::ActiveState != m_camera->state()) {QMessageBox::information(this, u8"提示", u8"摄像头支持的设置列表获取失败");return;}// 获取当前设置信息QCameraViewfinderSettings setting = m_camera->viewfinderSettings();// 更新当前设置信息容器updateCameraSupportSettingsInfoBySetting(setting);// 遍历支持的设置容器,并在设置细腻些下拉框中添加索引for(int idx = 0; idx < m_camera->supportedViewfinderSettings().size(); ++idx) {ui->comboBoxSettings->addItem(u8"设置" + QString::number(idx));}// 将设置下拉框设置为默认设置信息对于的选项ui->comboBoxSettings->setCurrentIndex(m_camera->supportedViewfinderSettings().indexOf(setting));
}void MainWindow::updateCameraSupportSettingsInfoBySetting(const QCameraViewfinderSettings &setting)
{// 设置信息显示清空ui->textBrowserSettingInfo->clear();// 分别添加分辨率、像素光谱比、帧率、像素格式数据QString resolutionStr = QString(u8"分辨率:%1, %2 ").arg(setting.resolution().width()).arg(setting.resolution().height());QString pixelAspectRatioStr = QString(u8"像素光谱比:%1, %2 ").arg(setting.pixelAspectRatio().width()).arg(setting.pixelAspectRatio().height());QString frameRateStr = QString(u8"帧率:(%1, %2) ").arg(setting.maximumFrameRate()).arg(setting.minimumFrameRate());QString pixelFormatStr = QString(u8"像素格式:%1 ").arg(setting.pixelFormat());// 信息追加显示ui->textBrowserSettingInfo->append(resolutionStr);ui->textBrowserSettingInfo->append(pixelAspectRatioStr);ui->textBrowserSettingInfo->append(frameRateStr);ui->textBrowserSettingInfo->append(pixelFormatStr);}void MainWindow::on_btnOpenCamera_clicked()
{// 当打开新相机时,释放原有相机对象,再重新创建if(Q_NULLPTR != m_camera) {delete m_camera;m_camera = new QCamera(m_hashCameraInfos[ui->comboBoxCameraInfo->currentText()], this);m_camera->setViewfinder(&m_cameraViewfinder);// 将栈窗口设置为相机窗口ui->stackedWidget->setCurrentIndex(0);}// 判断摄像头是否链接成功if(QCamera::NoError != m_camera->error()) {QMessageBox::warning(this, u8"警告", m_camera->errorString());}else {// 外部接入的摄像头输出“failed to find the video proc amp”m_camera->start();if(QCamera::ActiveState == m_camera->state()) {updateCameraSupportInfo();updateCameraSupportSettingsInfo();}}
}void MainWindow::on_btnCaptureImg_clicked()
{// 判断摄像头状态if(QCamera::ActiveState != m_camera->state()) {QMessageBox::information(this, u8"提示", u8"摄像头未启动");return;}else if(!QDir().exists(ui->lineEditSavePath->text())) { // 当前设置路径不存在则提示返回QMessageBox::information(this, u8"提示", u8"指定保存路径无效");return;}// 创建相机图像捕捉对象并传入当前摄像头对象QCameraImageCapture imageCapture(m_camera);// 判断错误信息if(QCameraImageCapture::NoError != imageCapture.error()) {QMessageBox::warning(this, u8"警告", u8"出错了:" + imageCapture.errorString());return;}// 锁定相机配置:锁定所有支持的相机设置m_camera->searchAndLock();// 通过选择的路径和当前时间,拼接出图片保存文件路径及文件名QString imgFileName = ui->lineEditSavePath->text() + QDateTime::currentDateTime().toString("/yyyyMMdd-hhmmss(z)");// 图像截取if( -1 == imageCapture.capture(imgFileName)) {QMessageBox::information(this, u8"提示", u8"图片捕获失败 " + m_camera->errorString());}else {// 将保存的图片添加到右下角的图片标签中QTimer::singleShot(200, this, [this, imgFileName](){// 设置图片保持比例及无锯齿效果ui->labelImg->setPixmap(QPixmap(imgFileName).scaled(ui->labelImg->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));// 更新缩略图的路径ui->labelImg->setWhatsThis(imgFileName);});}// 解锁所有请求的摄像头锁m_camera->unlock();
}void MainWindow::on_btnBaseInfo_clicked()
{if(QCamera::ActiveState != m_camera->state()) {QMessageBox::information(this, u8"提示", u8"摄像头未启动,无法获取基础信息");return;}// 信息容器QStringList infoStrList;// 相机基础信息依次添加infoStrList.append(u8"错误码:" + QString::number(m_camera->error()));infoStrList.append(QString(u8"错误描述:\"%1\"").arg(m_camera->errorString()));infoStrList.append(u8"锁定状态:" + QString::number(m_camera->lockStatus()));infoStrList.append(u8"当前状态1:" + QString::number(m_camera->state()));infoStrList.append(u8"当前状态2:" + QString::number(m_camera->status()));// 展示相机基础信息QMessageBox msg(u8"提示", infoStrList.join("\n"), QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);msg.exec();
}void MainWindow::on_btnExposureInfo_clicked()
{if(QCamera::ActiveState != m_camera->state()) {QMessageBox::information(this, u8"提示", u8"摄像头未启动,无法获取曝光信息");return;}// 信息容器QStringList infoStrList;// 获取相机曝光对象QCameraExposure *exposure = m_camera->exposure();// 曝光信息依次添加infoStrList.append(u8"光圈:" + QString::number(exposure->aperture()));infoStrList.append(u8"曝光补偿:" + QString::number(exposure->exposureCompensation()));infoStrList.append(u8"等灵敏度:" + QString::number(exposure->isoSensitivity()));infoStrList.append(u8"快门速度:" + QString::number(exposure->shutterSpeed()));infoStrList.append(u8"点测量点:" + QString::number(exposure->spotMeteringPoint().x())+ "," + QString::number(exposure->spotMeteringPoint().y()));// 展示曝光信息QMessageBox msg(u8"提示", infoStrList.join("\n"), QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);msg.exec();
}void MainWindow::on_btnCameraFocusInfo_clicked()
{if(QCamera::ActiveState != m_camera->state()) {QMessageBox::information(this, u8"提示", u8"摄像头未启动,无法获取聚焦信息");return;}// 信息容器QStringList infoStrList;// 获取相机聚焦对象QCameraFocus *focus = m_camera->focus();// 聚焦信息依次添加infoStrList.append(u8"自定义焦点:" + QString::number(focus->customFocusPoint().x())+ "," + QString::number(focus->customFocusPoint().y()));infoStrList.append(u8"数码变焦:" + QString::number(focus->digitalZoom()));infoStrList.append(u8"最大数码变焦:" + QString::number(focus->maximumDigitalZoom()));infoStrList.append(u8"光学变焦:" + QString::number(focus->opticalZoom()));infoStrList.append(u8"最大光学变焦:" + QString::number(focus->maximumOpticalZoom()));// 展示聚焦信息QMessageBox msg(u8"提示", infoStrList.join("\n"), QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);msg.exec();
}void MainWindow::on_btnImageProcessingInfo_clicked()
{if(QCamera::ActiveState != m_camera->state()) {QMessageBox::information(this, u8"提示", u8"摄像头未启动,无法获取图片处理信息");return;}// 信息容器QStringList infoStrList;// 获取相机图片处理对象QCameraImageProcessing *focus = m_camera->imageProcessing();// 图片处理信息依次添加infoStrList.append(u8"亮度:" + QString::number(focus->brightness()));infoStrList.append(u8"对比度:" + QString::number(focus->contrast()));infoStrList.append(u8"降噪级别:" + QString::number(focus->denoisingLevel()));infoStrList.append(u8"手动白平衡:" + QString::number(focus->manualWhiteBalance()));infoStrList.append(u8"饱和度:" + QString::number(focus->saturation()));infoStrList.append(u8"锐化级别:" + QString::number(focus->sharpeningLevel()));// 展示图片处理信息QMessageBox msg(u8"提示", infoStrList.join("\n"), QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);msg.exec();
}void MainWindow::on_btnUseCurrentSettings_clicked()
{if(QCamera::ActiveState != m_camera->state()) {QMessageBox::information(this, u8"提示", u8"摄像头未启动,无法更新设置");}else if(m_camera->viewfinderSettings()!= m_camera->supportedViewfinderSettings().at(ui->comboBoxSettings->currentIndex())) {  // 判断当前取景器设置和将要设置的取景器设置不一致则进入// 根据当前取景器设置下拉框索引位置获取设置m_camera->setViewfinderSettings(m_camera->supportedViewfinderSettings().at(ui->comboBoxSettings->currentIndex()));}
}void MainWindow::on_comboBoxSettings_currentIndexChanged(int index)
{if(-1 != index) {// 根据设置信息下拉框切换后的索引位置获取对应的设置并更新相机设置信息updateCameraSupportSettingsInfoBySetting(m_camera->supportedViewfinderSettings().at(index));}
}void MainWindow::on_btnSelSavePath_clicked()
{// 获取保存目录QString savePath = QFileDialog::getExistingDirectory();// 保存路径不为空则进入设置if(!savePath.isEmpty()) {ui->lineEditSavePath->setText(savePath);}
}void MainWindow::on_btnPreviewImg_clicked(bool checked)
{// 更新按钮文本if(!checked) {ui->btnPreviewImg->setText(u8"预览");// 切换到相机窗口ui->stackedWidget->setCurrentIndex(0);}else if(checked && !ui->labelImg->whatsThis().isEmpty()) { // 判断是否存在可预览图像// 将图像显示到预览标签中并设置图片保持比例及无锯齿效果ui->labelImgPreview->setPixmap(QPixmap(ui->labelImg->whatsThis()).scaled(ui->labelImgPreview->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));ui->btnPreviewImg->setText(u8"返回");// 切换到预览窗口ui->stackedWidget->setCurrentIndex(1);}else {ui->btnPreviewImg->setChecked(!checked);QMessageBox::information(this, u8"提示", u8"暂无可预览图片");}
}

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>1117</width><height>857</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"><layout class="QGridLayout" name="gridLayout_2" rowstretch="1,0,1,1,1" columnstretch="1,0"><item row="0" column="0" rowspan="5"><widget class="QWidget" name="widgetCamera" native="true"><property name="styleSheet"><string notr="true">border:2px solid rgb(112, 112, 112);</string></property><layout class="QVBoxLayout" name="layoutStacked"><property name="leftMargin"><number>0</number></property><property name="topMargin"><number>0</number></property><property name="rightMargin"><number>0</number></property><property name="bottomMargin"><number>0</number></property><item><widget class="QStackedWidget" name="stackedWidget"><widget class="QWidget" name="page"><layout class="QVBoxLayout" name="layoutCamera"/></widget><widget class="QWidget" name="page_2"><layout class="QHBoxLayout" name="horizontalLayout_2"><item><widget class="QLabel" name="labelImgPreview"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="styleSheet"><string notr="true">border:none;</string></property><property name="text"><string/></property><property name="alignment"><set>Qt::AlignCenter</set></property></widget></item></layout></widget></widget></item></layout></widget></item><item row="0" column="1"><widget class="QGroupBox" name="groupBox_2"><property name="title"><string>摄像头操作</string></property><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QComboBox" name="comboBoxCameraInfo"/></item><item><widget class="QPushButton" name="btnOpenCamera"><property name="text"><string>打开摄像头</string></property></widget></item><item><layout class="QHBoxLayout" name="horizontalLayout"><item><widget class="QLineEdit" name="lineEditSavePath"><property name="placeholderText"><string>请选择保存路径</string></property></widget></item><item><widget class="QPushButton" name="btnSelSavePath"><property name="text"><string>选择路径</string></property></widget></item></layout></item><item><widget class="QPushButton" name="btnCaptureImg"><property name="text"><string>拍摄</string></property></widget></item></layout></widget></item><item row="1" column="1"><widget class="QGroupBox" name="groupBox"><property name="title"><string>信息展示</string></property><layout class="QGridLayout" name="gridLayout"><item row="0" column="0"><widget class="QPushButton" name="btnBaseInfo"><property name="text"><string>基础信息</string></property></widget></item><item row="0" column="1"><widget class="QPushButton" name="btnExposureInfo"><property name="text"><string>曝光信息</string></property></widget></item><item row="1" column="0"><widget class="QPushButton" name="btnCameraFocusInfo"><property name="text"><string>相机聚焦信息</string></property></widget></item><item row="1" column="1"><widget class="QPushButton" name="btnImageProcessingInfo"><property name="text"><string>图像处理信息</string></property></widget></item></layout></widget></item><item row="2" column="1"><widget class="QGroupBox" name="groupBox_3"><property name="title"><string>相机支持信息</string></property><layout class="QGridLayout" name="gridLayout_3"><item row="0" column="0"><widget class="QTextBrowser" name="textBrowserSupportInfo"/></item></layout></widget></item><item row="4" column="1"><widget class="QGroupBox" name="groupBox_4"><property name="title"><string>图片预览</string></property><layout class="QGridLayout" name="gridLayout_5"><item row="1" column="0"><widget class="QPushButton" name="btnPreviewImg"><property name="text"><string>预览</string></property><property name="checkable"><bool>true</bool></property></widget></item><item row="0" column="0"><widget class="QLabel" name="labelImg"><property name="sizePolicy"><sizepolicy hsizetype="Expanding" vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string/></property><property name="alignment"><set>Qt::AlignCenter</set></property></widget></item></layout></widget></item><item row="3" column="1"><widget class="QGroupBox" name="groupBox_5"><property name="title"><string>相机支持的取景器设置列表</string></property><layout class="QGridLayout" name="gridLayout_6"><item row="1" column="0"><widget class="QTextBrowser" name="textBrowserSettingInfo"/></item><item row="0" column="0"><widget class="QComboBox" name="comboBoxSettings"/></item><item row="2" column="0"><widget class="QPushButton" name="btnUseCurrentSettings"><property name="text"><string>使用设置</string></property></widget></item></layout></widget></item></layout></widget><widget class="QMenuBar" name="menubar"><property name="geometry"><rect><x>0</x><y>0</y><width>1117</width><height>26</height></rect></property></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>

四、总结

  1. 需要修改相机参数,使用相机前请参考相机支持函数信息。
  2. 相机提供的几个控制对象获取函数都是只能查看不能修改。
  3. 同时,相机对象发出的信号信息也值得关注。

友情提示——哪里看不懂可私哦,让我们一起互相进步吧
(创作不易,请留下一个免费的赞叭 谢谢 ^o^/)

注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。
注:如有侵权,请联系作者删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457092.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

地平线x5下运行yolo11s-seg模型

经过地瓜机器人工作人员&#xff08;感谢吴超同学&#xff09;的及时技术支持&#xff0c;整体比较顺利的跑起来了yolo11s-seg分割模型。将一些经验记录下来&#xff1a; 首先下载使用docker镜像&#xff1a; https://developer.d-robotics.cc/forumDetail/228559182180396619 …

linux驱动—注册总线分析

成功地在直接注册了一个总线&#xff0c;并且在总线目录下创建了属性文件&#xff0c;什么会在 sys/bus 目录下生成 mybus,目录以及对应的 devices,drivers, drivers_autoprobe,drivers_probe&#xff0c;uevent目录和属性呢? /sys,目录下的目录都对应一个kobject&#xff0c;…

如何成为录屏高手?2024年全新录屏工具梳理,你选对了吗?

如何录屏&#xff1f;录屏现在对我们来说太重要了&#xff0c;不管是做教学视频、演示文稿&#xff0c;还是录游戏或者教别人怎么用软件&#xff0c;都离不开录屏工具。但是市面上录屏软件一大堆&#xff0c;挑个适合自己的真不容易。今天&#xff0c;我就来给你介绍几款特别火…

知识图谱解码:AI 如何构建知识网络

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 AI工具集1&#xff1a;大厂AI工具【共23款…

凸轮应用实例(带进料装置的伺服压机控制)

凸轮表凸轮关系曲线建立 博途S7-1500T PLC曲柄连杆模型仿真(电子凸轮完整配置+SCL源代码)-CSDN博客文章浏览阅读4次。这篇博客介绍了曲柄连杆机构的位移与曲柄转动角度关系,通过MATLAB进行计算和Simulink验证,并提供博途SCL源代码。文章链接提供了详细的曲柄连杆数学模型分析…

分布式理论基础

文章目录 1、理论基础2、CAP定理1_一致性2_可用性3_分区容错性4_总结 3、BASE理论1_Basically Available&#xff08;基本可用&#xff09;2_Soft State&#xff08;软状态&#xff09;3_Eventually Consistent&#xff08;最终一致性&#xff09;4_总结 1、理论基础 在计算机…

WASM 使用说明23事(RUST实现)

文章目录 1. wasm是什么1.1 chatgpt定义如下:1.2 wasm关键特性&#xff1a; 2. wasm demo2.1 cargo 创建项目2.2 编写code2.3 安装wasm-pack2.4 编译 3.1 html页面引用wasm代码&#xff08;js引用&#xff09;3.2 访问页面4 导入js function4.1 编写lib.rs文件&#xff0c;内容…

【SpringCloud】06-Sentinel

1. 雪崩问题 一个微服务出现问题导致一系列微服务都不可以正常工作。 服务保护方案&#xff1a; 请求限流。线程隔离。 服务熔断 2. Sentinel 启动Sentinel java -Dserver.port8090 -Dcsp.sentinel.dashboard.serverlocalhost:8090 -Dproject.namesentinel-dashboard -ja…

【已解决】C# NPOI如何在Excel文本中增加下拉框

前言 上图&#xff01; 解决方法 直接上代码&#xff01;&#xff01;&#xff01;&#xff01;综合了各个大佬的自己修改了一下&#xff01;可以直接规定在任意单元格进行设置。 核心代码方法块 #region Excel增加下拉框/// <summary>/// 增加下拉框选项/// </s…

centeros7 编译ffmpeg

使用yum安装的路似乎已经堵住了&#xff0c;请求的镜像全是404或503 1.打开终端并使用yum安装EPEL存储库(Extra Packages for Enterprise Linux)&#xff1a;sudo yum install epel-release2.接下来&#xff0c;使用以下命令来安装FFmpeg&#xff1a;sudo yum install ffmpeg …

有关spring,springboot项目的知识点

文章目录 1.Spring基本介绍1.1Spring官网1.2Spring的发展 2.SpringBoot2.1SpringBoot快速入门2.1.1创建SpringBoot工程,并勾选web开发相关依赖2.1.2定义HelloController类,并添加方法helllo,且添加注解2.1.3运行测试 3.HTTP协议3.1HTTP协议的概念3.1.1HTTP的特点 3.2HTTP-请求协…

YOLOv8_ ByteTrack目标跟踪、模型部署

YOLOv8目前支持BoT-SORT和ByteTrack两种多目标跟踪算法&#xff0c;默认的目标跟踪算法为BoT-SORT 如果要使用ByteTrack跟踪算法&#xff0c;可以添加命令行参数trackerbytetrack.yaml 一、 VisDrone2019数据集 VisDrone&#xff1a;无人机目标检测和追踪基准数据集。&#x…

《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法

在本节课程中&#xff0c;我们将一起深入了解K8s权限维持的攻击手法&#xff0c;通过研究这些攻击手法的技术细节&#xff0c;来更好地认识K8s权限维持所带来的安全风险。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; K8s权限维持&#xff1a;简单介绍K8s权限维持…

【大模型理论篇】主流大模型的分词器选择及讨论(BPE/BBPE/WordPiece/Unigram)

1. 背景分析 分词是将输入和输出文本拆分成更小单位的过程&#xff0c;使得大模型能够处理。token可以是单词、字符、子词或符号&#xff0c;取决于模型的类型和大小。分词可以帮助模型处理不同的语言、词汇和格式&#xff0c;并降低计算和内存成本。分词还可以通过影响token的…

10-1.idea中的项目结构,辅助快捷键,模块的操作

idea中的项目结构和辅助快捷键 IDEA中项目结构 首先是创建项目&#xff0c;新建的项目中有子项目&#xff0c;我们可以创建模块 然后在模块中我们可以创建包&#xff0c;在包中的SRC中写我们的源代码&#xff0c;也就是类。 VScode写Java项目 如何你电脑比较卡的话&#…

Java中自增自减,赋值,逻辑,三元运算符

自增自减运算符 在某个变量前面或者后面加一--在某个变量前面或者后面减一 可以看见&#xff0c;当a输出时&#xff0c;a是没有变化的&#xff0c;说明如果是在变量后就是先使用再增加&#xff0c;而b输出时&#xff0c;b增加了1&#xff0c;说明如果是在变量前面就是先增加再…

【elkb】linux麒麟v10安装ELKB 8.8.X版本(ARM架构)

下载软件 相关版本信息 elasticsearch&#xff1a;8.8.1kibana&#xff1a;8.8.1logstash&#xff1a;8.8.1filebeat&#xff1a;8.8.1 下载地址 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.1-linux-aarch64.tar.gzhttps://artifacts.elastic…

配置nginx服务通过ip访问多网站

文章目录 第一种方法第二种方法 先关闭防火墙 # systemctl stop firewalld # setenforce 0第一种方法 #mntui 第二种方法 # vim /etc/nginx/conf.d/test_ip.conf # cat /etc/nginx/conf.d/test_ip.conf server {listen 192.168.234.100:80;#server_nameroot /test/100;loca…

PostgreSQL使用clickhouse_fdw访问ClickHouse

Postgres postgres版本&#xff1a;16&#xff08;测试可用&#xff09;docker 安装 插件安装 clickhouse_fdw: https://github.com/ildus/clickhouse_fdw 安装命令 git clone gitgithub.com:ildus/clickhouse_fdw.git cd clickhouse_fdw mkdir build && cd build…

文件下载漏洞

文件安全 文件下载 常见敏感信息路径 Windows C:\boot.ini //查看系统版本 C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件 C:\Windows\repair\sam //存储系统初次安装的密码 C:\Program Files\mysql\my.ini //Mysql配置 C:\Program Files\mysql\data\mysql\user.…