图像识别(11)——LED灯光点捕获+基于QT平台绘制轨迹(1)
来源:互联网 发布:555是什么意思网络用语 编辑:程序博客网 时间:2024/04/28 13:51
博主QQ:1356438802
QQ群:473383394——UVC&OpenCV473383394
平台:Win7 64bits + Qt 5.3.0 MinGW 32bit + OpenCV 2.4.10
在前面的文章中,我已经实现了捕获红外LED灯的光点,并且借助OpenCV的imshow()函数,可以直接将光点轨迹图像显示在窗体界面上。
另外由于OpenCV是纯C/C++的开源库,可以在VisualStudio和QT开发平台中,无缝切换编译运行(当然前提是你已经准备好了两个平台的OpenCV库),在上一篇文章的末尾,我已经分别给出了VisualStudio和QT两个平台的源码。
于是我现在要在上述QT的源码《LED_detect.rar》的基础上,再改进。我在多个场合说过,MFC平台不适合做UI,没有布局工具,非常麻烦,这就是为什么我现在要迁移到QT开发平台。而且OpenCV自带的窗体不美观,交互性也很弱,不适合直接拿来做产品,那么我现在要结合OpenCV的算法优势和QT的桌面软件编程优势,继续深入手写笔应用的开发!
核心思想:单独开一个线程,专门负责摄像头的图像识别工作,即捕获LED灯光点,计算光点坐标,再反馈给QT的UI界面,绘图。
涉及的QT知识点:
1. paintEvent绘图事件
2. 信号与槽
3. QT线程的一种新用法
mainwindow.cpp文件如下
#include <QMessageBox>#include <QThread>#include <QDebug>#include "cfg.h"#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); mIsFirstPoint = true; mCenterPoint = mPrevCenterPoint = QPointF(0.0, 0.0); //把LED灯追踪放入一个子线程里面运行 mTracker = new Track(); mTrackThread = new QThread(this); mTracker->moveToThread(mTrackThread); connect(this, SIGNAL(startTrack()), mTracker, SLOT(startTrack())); connect(mTracker, SIGNAL(TrackPoint(QPointF)), this, SLOT(setPoints(QPointF))); connect(mTracker, SIGNAL(errnum(int)), this, SLOT(errProc(int))); mTrackThread->start();}MainWindow::~MainWindow(){ //停止图像识别 mTracker->StopTrack(); //结束线程 mTrackThread->quit(); mTrackThread->wait(); delete mTrackThread; delete mTracker; delete ui;}void MainWindow::paintEvent(QPaintEvent *event){ Q_UNUSED(event); QPainter painter(this); // 反走样 反锯齿 painter.setRenderHint(QPainter::Antialiasing, true); // 设置画笔颜色 painter.setPen(QColor(0, 160, 230)); // 绘制直线 painter.drawLine(mPrevCenterPoint, mCenterPoint); // 保存当前光点坐标, 下次绘制时使用 mPrevCenterPoint = mCenterPoint;}void MainWindow::setPoints(QPointF point){ mCenterPoint = point; if(true == mIsFirstPoint) { mPrevCenterPoint = mCenterPoint; mIsFirstPoint = false; } // 开始重绘 update();}void MainWindow::errProc(int err){ if(CFG::CAMERA_OPEN_FAILED == err) { QMessageBox::warning(this, "警告", "摄像头打开失败"); }}void MainWindow::on_btnStartTrack_clicked(){ emit startTrack();}
完整源码下载链接:
LED_track-20170209.rar
0 0
- 图像识别(11)——LED灯光点捕获+基于QT平台绘制轨迹(1)
- 图像识别(12)——LED灯光点捕获+基于QT平台绘制轨迹(2)
- LED灯光控制系统--基于WIZ610wi
- 给定坐标点,绘制轨迹
- 百度地图绘制轨迹点
- 图像识别(7)——静态图片识别LED灯+Canny阈值调节+圆心打点
- 相似图像识别检 —基于图像签名(LSH)
- Linux 平台下基于Qt 的电子地图的绘制
- 基于HMM轨迹识别matlab简单说明
- 基于密集轨迹的动作识别
- 【DirectX11】第十篇 其他灯光类型——点光源
- 基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(2)-轨迹多文档手写轨迹输入多语言识别范例
- 图像灰度直方图绘制——使用QT实现一个图像处理软件2
- 基于Qt的轨迹还原之一:introduction
- 【图像识别】【读论文】基于Kinect手势识别的网页控制软件设计——陈建军
- Opencv 图像结构分析与形状识别—— drawContours函数用于绘制和填充
- 跟踪轨迹识别——判断两条线段相交
- 互联网相似图像识别检索引擎 —— 基于图像签名的方式
- iOS开发断点调试高级技巧
- 【CSS】自定义上传文件按钮
- LagomFramework介绍(一)
- Android五大布局,四大组件,五种存储方式,activity四种启动模式
- CentOS7安装LNMP+Mongodb环境
- 图像识别(11)——LED灯光点捕获+基于QT平台绘制轨迹(1)
- Maven本地环境搭建
- Swift的学习总结
- 畅通工程再续
- 关于APP安装来源统计的分析
- 使用VPS搭建shadowsocks服务
- oracle连接两种方式thin与oci区别
- activity启动方式
- 面试题目20170209