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

顺义企业网站建站公司企业推广网站

顺义企业网站建站公司,企业推广网站,做旅游计划上哪个网站,安庆网站建设专Qt中的QLabel控件用于显示文本或图像,不提供用户交互功能。以下测试代码用于从内置摄像头获取图像并实时显示: Widgets_Test.h: class Widgets_Test : public QMainWindow {Q_OBJECTpublic:Widgets_Test(QWidget *parent nullptr);~Widgets…

      Qt中的QLabel控件用于显示文本或图像,不提供用户交互功能。以下测试代码用于从内置摄像头获取图像并实时显示:

      Widgets_Test.h:

class Widgets_Test : public QMainWindow
{Q_OBJECTpublic:Widgets_Test(QWidget *parent = nullptr);~Widgets_Test();private slots:void start_capture();void close_caputre();void update_frame(const QImage& image);private:void capture();Ui::Widgets_TestClass ui_;std::thread capture_thread_{};std::atomic<bool> is_running_{ false };
};

      Widgets_Test.cpp:

Widgets_Test::Widgets_Test(QWidget *parent): QMainWindow(parent)
{ui_.setupUi(this);connect(ui_.button_close, &QPushButton::clicked, this, &Widgets_Test::close);connect(ui_.open_camera, &QPushButton::clicked, this, &Widgets_Test::start_capture);connect(ui_.close_camera, &QPushButton::clicked, this, & Widgets_Test::close_caputre);connect(ui_.open_camera, &QPushButton::clicked, this, [this] {ui_.button_close->setEnabled(false);});connect(ui_.close_camera, &QPushButton::clicked, this, [this] {ui_.button_close->setEnabled(true);});
}Widgets_Test::~Widgets_Test()
{}void Widgets_Test::start_capture()
{is_running_.store(true);capture_thread_ = std::thread([this] {this->capture();});
}void Widgets_Test::capture()
{cv::VideoCapture cap(0);if (!cap.isOpened()) {qWarning("failed to open camera"); // QMetaObject::invokeMethod, UI操作必须在主线程中执行emit ui_.close_camera->clicked();return;}auto w1 = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_WIDTH));auto h1 = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_HEIGHT));auto w2 = ui_.label_show->width();auto h2 = ui_.label_show->height();qDebug() << w1 << "," << h1 << "," << w2 << "," << h2;cv::Mat frame{}, rgb{};QImage image{}, img_copy{};while (is_running_.load()) {cap >> frame;if (frame.empty())continue;cv::cvtColor(frame, rgb, cv::COLOR_BGR2RGB);cv::resize(rgb, rgb, cv::Size(w2, h2));image = QImage(rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_RGB888);img_copy = image.copy();QMetaObject::invokeMethod(this, "update_frame", Qt::QueuedConnection, Q_ARG(QImage, img_copy));std::this_thread::sleep_for(std::chrono::milliseconds(10));}
}void Widgets_Test::update_frame(const QImage& image)
{ui_.label_show->setPixmap(QPixmap::fromImage(image));
}void Widgets_Test::close_caputre()
{is_running_.store(false);if (capture_thread_.joinable())capture_thread_.join();
}

      说明

      1. 在子线程中获取摄像头每帧数据:

      (1).因为QLabel中接收数据的类型为QImage,这里需要将cv::Mat转换为QImage。

      (2).通过QMetaObject::invokeMethod函数调用对象上的信号或槽函数,支持跨线程调用。这里使用此函数将子线程获取到的图像数据传给主线程上的QLabel控件。使用Qt::QueuedConnection,跨线程异步调用。

      2.UI操作必须在主线程中执行

      (1).主线程中通过QLabel的setPixmap函数显示图像。

      3.点击"open camera",开始打开摄像头采集显示图像;点击"close camera",关闭摄像头。

      执行结果如下图所示:

      GitHub:https://github.com/fengbingchun/Qt_Test

http://www.dtcms.com/wzjs/86280.html

相关文章:

  • 插画素材网站有哪些推广竞价
  • 同一服务器做两个顶级域名网站百度广告登录入口
  • 公司网站制作工作室郑州seo实战培训
  • 怎么做网站建设淘宝自动推广软件
  • 做网站 需求怎么写线上推广是什么意思
  • 想做网站多少钱杭州seo教程
  • 投注网站建设需要windows优化大师下载安装
  • 太原网站建设dweb搜索引擎整合营销
  • 做网站开始要注意什么产品网络推广
  • 后湖做网站热点新闻事件及观点
  • 东莞seo网站优化如何优化seo技巧
  • 做做网站友情链接交换平台免费
  • php网站制作实例教程海洋seo
  • 金华市有网站建设最低价南宁百度seo建议
  • 虹口专业做网站电商培训机构排名前十
  • 罗湖做网站联系电话百度小程序优化
  • 律师做网站产品推广运营方案
  • 网站建设方案 前台 后台建站优化推广
  • wordpress 标题栏置顶关键词seo价格
  • 做海鱼的网站平台推广渠道
  • 网站怎么做悬浮图片网站友情链接自动上链
  • 郑州购物网站建设百度搜索引擎收录
  • 专业企业网站设计网络公司广东省广州市佛山市
  • 山东电力建设网站seo推广绩效考核指标是什么
  • oa系统主要干什么的江门关键词排名优化
  • 网站建设公司的重要性百度seo排名公司
  • 网站开发程序有哪些网站增加外链的方法有哪些
  • 百度推广费刷关键词排名seo软件
  • php做的网站怎么调试网络营销策划书
  • 高端 网站开发新闻发布稿