当前位置: 首页 > backend >正文

qt5.14.2 opencv调用摄像头显示在label

ui界面添加一个Qlabel名字是默认的label

还有一个button名字是pushButton

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <opencv2/opencv.hpp>  // 添加OpenCV头文件
#include <QTimer>              // 添加定时器头文件QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();void updateFrame();  // 新增的帧更新槽函数private:Ui::MainWindow *ui;cv::VideoCapture cap;  // OpenCV视频捕获对象QTimer *timer;         // 定时器对象
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/opencv.hpp>
#include <QTimer>
#include <QImage>
#include <QPixmap>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 初始化定时器timer = new QTimer(this);// 连接信号和槽connect(timer, &QTimer::timeout, this, &MainWindow::updateFrame);// 设置Label的缩放策略ui->label->setScaledContents(true);
}MainWindow::~MainWindow()
{// 释放资源if(cap.isOpened()) {cap.release();}if(timer->isActive()) {timer->stop();}delete ui;
}void MainWindow::on_pushButton_clicked()
{if (!timer->isActive()) {// 尝试打开摄像头cap.open(0); // 0表示默认摄像头if (!cap.isOpened()) {ui->label->setText("无法打开摄像头");return;}// 设置摄像头分辨率(可选)cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);timer->start(30); // 每30毫秒更新一帧ui->pushButton->setText("停止摄像头");} else {// 停止摄像头timer->stop();cap.release();ui->pushButton->setText("启动摄像头");ui->label->clear();}
}void MainWindow::updateFrame()
{cv::Mat frame;cap >> frame; // 从摄像头获取一帧if (!frame.empty()) {// 将OpenCV的BGR格式转换为RGBcv::cvtColor(frame, frame, cv::COLOR_BGR2RGB);// 将cv::Mat转换为QImageQImage img(frame.data,frame.cols,frame.rows,frame.step,QImage::Format_RGB888);// 将QImage转换为QPixmap并显示在Label上ui->label->setPixmap(QPixmap::fromImage(img));}
}

http://www.xdnf.cn/news/6632.html

相关文章:

  • CS016-4-unity ecs
  • MySQL查询不区分大小写问题剖析
  • 58. 区间和
  • Multimodal models —— CLIP,LLava,QWen
  • java输入输出类
  • MySQL MCP 使用案例
  • ubuntu 更新华为源
  • windows下authas调试tomcat
  • 突发,苹果发布下一代 CarPlay Ultra
  • WEB安全--Java安全--shiro721反序列化漏洞
  • 快速选择算法:优化大数据中的 Top-K 问题
  • 本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能
  • ssti刷刷刷
  • 使用 LSTM/GRU 预测设备异常的模型
  • 【HTML5学习笔记2】html标签(下)
  • Java视频流RTMP/RTSP协议解析与实战代码
  • PCL 计算一条射线与二次曲面的交点
  • 西安前端面试
  • YOLO+UI(C#)开发
  • 基于React的高德地图api教程006:两点之间距离测量
  • 大规模CFD仿真计算中,SIMPLE或者PISO算法中加速压力场方程迭代求解
  • SZU 编译原理
  • BASE理论
  • 四、xlib区域
  • go 集成base64Captcha 支持多种验证码
  • 【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。
  • 从银行排队到零钱支付:用“钱包经济学”重构Java缓存认知
  • LLaMA-Factory微调大模型Qwen2.5
  • 【设计模式】- 行为型模式1
  • 利用 Amazon Bedrock Data Automation(BDA)对视频数据进行自动化处理与检索