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

南通免费网站建设织梦大气婚纱影楼网站源码

南通免费网站建设,织梦大气婚纱影楼网站源码,晋江论坛怎么搜索,做网站投资太大 网站也没搞起来本文详细讲解了如何利用 Qt 和 OpenCV 实现一个可从视频和图片中检测二维码的软件。代码实现了视频解码、多线程处理和界面更新等功能#xff0c;是一个典型的跨线程图像处理项目。以下分模块对代码进行解析。 一、项目的整体结构 项目分为以下几部分#xff1a; 主窗口 (M…本文详细讲解了如何利用 Qt 和 OpenCV 实现一个可从视频和图片中检测二维码的软件。代码实现了视频解码、多线程处理和界面更新等功能是一个典型的跨线程图像处理项目。以下分模块对代码进行解析。 一、项目的整体结构 项目分为以下几部分 主窗口 (MainWindow) 负责界面的加载、初始化和用户交互。工作线程 (mThread)处理耗时的图像处理任务如二维码识别。二维码检测逻辑使用 OpenCV 进行二维码检测支持图片和视频两种数据来源。多线程通信通过信号与槽机制在主线程和工作线程之间传递状态与数据。 二、主窗口功能解析 1. 初始化界面和变量 MainWindow 类的构造函数调用了 initializeUI() 和 initializeVariable()分别完成了界面的样式加载和核心变量的初始化。 void MainWindow::initializeVariable() {m_tip nullptr;m_lamp[0] QImage(:/Img/e.png);m_lamp[1] QImage(:/Img/i.png);m_lamp[2] QImage(:/Img/w.png);mthread new mThread(); // 创建工作线程m_Threadrun false;// 线程信号与主窗口槽函数的连接connect(mthread, SIGNAL(RuningState(bool)), this, SLOT(onRespondThreadRuningState(bool)));connect(mthread, SIGNAL(errors(QString)), this, SLOT(onRespondThreaderrors(QString)));connect(mthread, SIGNAL(infors(QString)), this, SLOT(onRespondThreadinfors(QString)));connect(mthread, SIGNAL(warings(QString)), this, SLOT(onRespondThreadwarings(QString)));connect(mthread, mThread::imageProcessed, this, MainWindow::processImage); }2. 启动和停止线程 用户点击按钮后调用 on_btn_Start_Stop_clicked判断当前线程状态以启动或停止工作线程。 void MainWindow::on_btn_Start_Stop_clicked() {m_Threadrun ? mthread-stop() : mthread-start(); // 根据当前状态启动或停止线程 }3. 文件选择 QFileDialog 被用来让用户选择视频或图像文件并将这些参数传递到线程处理。 void MainWindow::on_btn_Loadfile_clicked() {QString fileName QFileDialog::getOpenFileName(nullptr, tc(选择视频文件), , tc(视频文件(*.mp4)));mthread-setFunId(0); // 设置功能 ID0 表示处理视频if (!fileName.isEmpty())mthread-setThreadParams(fileName); // 传递参数到线程 }void MainWindow::on_btn_Loadimages_clicked() {QStringList fileNames QFileDialog::getOpenFileNames(nullptr, tc(选择图像文件), , tc(图片文件(*.jpg *.bmp *.png)));mthread-setFunId(1); // 设置功能 ID1 表示处理图片if (!fileNames.isEmpty())mthread-setThreadParams(fileNames); }三、工作线程实现 mThread 类继承自 QThread用于处理耗时的二维码检测任务。其主要功能包括 根据功能 ID 分别处理视频或图片。在每帧中调用 OpenCV 的 QRCodeDetector 进行二维码检测。通过信号将处理后的图像和数据传递回主线程。 1. 核心线程逻辑 线程的运行逻辑集中在 run() 方法中。getFunId() 决定了是处理视频还是图片分别调用 anayVideo() 或 anayImages()。 void mThread::run() {m_isRun true;emit RuningState(true); // 通知主线程线程开始运行emit infors(tc(线程启动));switch (getFunId()) {case 0:anayVideo(); // 处理视频break;case 1:anayImages(); // 处理图片break;default:break;}emit RuningState(false); // 通知主线程线程结束运行emit infors(tc(线程退出)); }2. 视频处理 在 anayVideo() 中使用 OpenCV 的 VideoCapture 解码视频逐帧处理。每一帧调用 delectDecoded() 检测二维码并通过信号将结果传回主线程。 void mThread::anayVideo() {cv::VideoCapture cap;if (!cap.open(m_Params.toString().toLocal8Bit().data()) || !cap.isOpened()){emit errors(tc(视频未打开));m_isRun false;}else{cv::Mat frame;int frameCount cap.get(cv::CAP_PROP_FRAME_COUNT);while ((frameCount--) 0 m_isRun) // 帧循环{cap frame; // 读取一帧if (frame.empty())break;QString msg;delectDecoded(frame, msg); // 检测二维码emit imageProcessed(MatToQImage(frame), msg); // 发射处理信号cv::waitKey(50);}cap.release();} }3. 图片处理 图片处理逻辑与视频类似只是直接从文件路径中读取。 void mThread::anayImages() {QStringList files m_Params.toStringList();for (auto file : files){cv::Mat frame cv::imread(file.toStdString().c_str());if (frame.empty() !m_isRun)break;QString msg;delectDecoded(frame, msg);emit imageProcessed(MatToQImage(frame), msg); // 发射信号cv::waitKey(1000);} }四、二维码检测实现 1. 使用 OpenCV 进行检测 在 delectDecoded() 方法中利用 OpenCV 的 QRCodeDetector 类进行二维码检测和解码并将结果绘制到图像中。 int mThread::delectDecoded(cv::Mat image, QString code) {cv::Mat bbox, rectifiedImage;std::string data qrDecoder.detectAndDecode(image, bbox, rectifiedImage);if (data.length() 0){code QString::fromStdString(data); // 将结果返回std::vectorcv::Point points;for (int i 0; i bbox.cols; i){points.push_back(cv::Point(static_castint(bbox.atcv::Point2f(0, i).x), static_castint(bbox.atcv::Point2f(0, i).y)));}for (size_t i 0; i points.size(); i){cv::line(image, points[i], points[(i 1) % points.size()], cv::Scalar(0, 255, 0), 3); // 绘制绿色边框}int minY points[0].y;for (const auto point : points) {minY std::min(minY, point.y);}cv::putText(image, data, cv::Point(points[0].x, minY - 10), cv::FONT_HERSHEY_SIMPLEX, 0.7, cv::Scalar(0, 255, 0), 2); // 显示二维码信息}else{code tc(未检测到二维码);}return 0; }2. Mat 转 QImage 为了在 Qt 界面中显示 OpenCV 的图像MatToQImage() 将 OpenCV 的 cv::Mat 转换为 Qt 的 QImage。 五、多线程与信号槽 在本项目中多线程通过信号与槽实现以下功能 更新主界面状态线程的运行状态如启动和停止通过 RuningState 信号通知主线程。实时更新图像和检测结果imageProcessed 信号传递处理后的图像和二维码信息更新界面。 connect(mthread, mThread::imageProcessed, this, MainWindow::processImage);void MainWindow::processImage(const QImage image, const QString msg) {ui-lab_disp-setPixmap(QPixmap::fromImage(image).scaled(image.width() / 2, image.height() / 2)); // 显示缩放后的图像ui-lab_disData-setText(msg); // 显示检测到的信息 }
http://www.tj-hxxt.cn/news/136150.html

相关文章:

  • 怎么才能把网站优化做好服装设计个人工作室
  • 织梦做网站主页容易吗娱乐城网站开发
  • 优秀企业网站建设哪家服务好网站建设社团活动宗旨
  • 大悟建设局网站怎么以公司名义注册邮箱
  • 个人网站怎么做支付微信上wordpress
  • 软件网站建设基本流程图网站建设毕业设计报告书
  • 梯子seo网络优化师招聘
  • 网站后台英语财务软件哪个好用
  • 网站推广公司汉狮网络江干区网站建设
  • 北京网站推广优化上海网站建设推荐案例
  • 网站搜索推广方案论文上海网站备案审核
  • 哪种类型的网站比较难做制作英文网站多少钱
  • 360永久免费建网站专业柳州网站建设多少钱
  • 济南外贸网站中国建设app官方下载
  • 免费网站模板怎么做网站做的网站怎么上传到网上
  • 中国手机最好的网站排名电商系统app开发
  • 中国建设招标网 官方网站下载wordpress数据库重置密码
  • 平板电脑可以做网站吗有哪些做的很漂亮的网站
  • 晋中住房与城乡建设厅网站wordpress链接失效
  • 网站关键词库是怎么做的企业网站建设运营方案
  • 银川网站建设公司哪家不错Php外贸网站建设新浪博客
  • 两学一做学习网站温州平阳县网站建设兼职
  • 黑白的网站网站如何做tag
  • 自己做图网站北京建设工程招标信息网站
  • 网站logo设计创意网站建设与管理项目1项目规划
  • 企业网站备案流程湖北省市政工程建设官方网站
  • 北京天奕时代创意设计有限公司seo运营招聘
  • 高端网站改版内部网站做域名解析到端口
  • 成都美食网站设计论文wordpress ftp下载
  • 优客工场 网站开发深圳电商页面设计那家好