- 博客(291)
- 资源 (14)
- 收藏
- 关注
原创 gstreamer 编码 cv::Mat 为h264 并推流到rtmp服务器
摘要:本文介绍了使用GStreamer框架将OpenCV的cv::Mat RGB图片编码为H264视频流并推送到RTMP服务器的实现方案。代码展示了如何构建包含appsrc、videoconvert、nvv4l2h264enc编码器等元素的处理管道,设置编码参数(帧率、码率等)和RTMP服务器地址。通过独立线程从队列获取图像数据,使用GStreamer的appsrc元素接收帧数据并推流,实现了高效的实时视频编码和流媒体传输功能。
2025-06-11 17:38:55
237
原创 ffmpeg 解析h264裸流数据 并转成cv::Mat
摘要:该代码实现了一个基于FFmpeg的H264视频流解码器类(FFmpegStreamDecoder),主要用于将H264编码数据解码为RGB格式的OpenCV矩阵。核心功能包括初始化(Init)、解码(Decode)和资源释放(DeInit)三个主要方法。解码器使用多线程(4线程)处理,支持动态分辨率调整,并通过SwsContext进行YUV到RGB的色彩空间转换。使用时需先初始化设置解码尺寸,然后调用Decode方法传入H264数据获取RGB图像,最后释放资源。解码过程中采用双锁机制确保线程安全。
2025-06-11 17:35:26
117
原创 基于 tinyfsm 的状态机
本文介绍了使用tinyfsm轻量级状态机框架重构软件架构的实践方案。首先推荐了开源单文件框架tinyfsm,并提供了状态机基础知识参考。重点展示了基于tinyfsm实现的多状态控制器设计,包括Idle、Init、Run、Exit四个状态类,通过事件触发状态转换。框架支持上下文传递(MQTT客户端、编码器等组件指针),提供了完整的生命周期管理:从日志初始化、组件初始化、运行到资源清理。最后演示了main函数中的调用方式,通过信号量实现优雅退出。该方案实现了一个清晰、可维护的状态机架构,适用于复杂系统开发。
2025-06-11 13:13:01
334
原创 windows 下用yolov5 训练模型 给到opencv 使用
本文介绍了在Windows系统上使用YOLOv5训练模型,并通过OpenCV加载模型进行推理的完整流程。首先,通过Anaconda搭建环境并安装YOLOv5,接着使用LabelImg进行数据标注。训练过程中,配置了data.yaml文件,确保图像与标签对应,并通过train.py脚本进行模型训练,生成best.pt模型文件。随后,将模型转换为ONNX格式以便OpenCV加载。在推理阶段,使用OpenCV的DNN模块加载ONNX模型,对输入图像进行预处理、前向推理和后处理,最终输出检测结果。然而,作者在推理过
2025-05-23 17:00:45
507
原创 OpenCASCADE 解析stp文件,并使用VTK显示
四,或者加载stp 文件,网格化后读取点和面片信息, 直接构造成vtk所需格式。三,加载stp文件,转成stl 并保存。之后vtk加载stl文件。cmake 引用头文件,库文件(静态库)一,occt 编译。二,occt 库引用。
2025-04-08 14:36:12
421
1
原创 VTK 动态渲染点云
2,VTK渲染窗口 利用vtkPoints 不停向其添加队列中的数据,添加完vtkPoints ,vtkPolyData 需要调用Modified 来更新数据,最后重新调用Window->Render() 进行渲染。3,最后相机 需要更新下视角。(ResetCamera(),ResetCameraClippingRange)1,用一个全局的队列,生产者不停像队列中添加部分点云数据,消费者(窗口) 定时从队列中拿数据进行渲染。一个线程 负责调算法 不停的合成点云的一部分数据,窗口负责不停的渲染数据。
2025-03-24 10:17:14
250
原创 Qt 中集成mqtt协议
声明一个单例类,将订阅到主题,直接以属性的方式 进行暴露,这样QML文件中 就可以直接使用。下边是订阅一个温度 和湿度的主题数据。我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台时 方便,直接编译就行了。一,引入qmqtt 库。
2025-02-23 20:06:48
882
原创 香橙派/树莓派 利用Wiring库 使用GPIO模拟PWM
香橙派或者树莓派 等开发板,本身带有硬件PWM,比如香橙派3 lts版,但是这个引脚不符合我的项目需求,我需要外接一个电机,在检测到人脸的时候 转动,但是这个硬件引脚,只要上电就开始输出pwm 信号,导致电机一直再转,因此采用软件 利用GPIO模拟的方式,更符合需求。
2025-02-23 19:55:37
309
原创 利用香橙派3 做一个摸鱼助手
作为一个专心码代码的程序员,最担心的就是别人突然出现在你的身后,盯着你写bug,所以呢,利用手中吃灰的香橙派做了这么一个设备,它的外表开起来就是一个纸抽盒,实际 是经过改装增加了时间,温湿度,日期,最新电影 等功能的一个显示屏,最重要的是利用摄像头监视身后有没有人过来。集成天气,时间,日期,毒鸡汤,彩虹屁,最新电影 等信息。1,摄像头 利用opencv循环检测是否存在人脸,存在则启动震动马达,起到一个通知的作用。2,DHT22 检测温湿度,然后利用MQTT 传输到上位机软件。一,软件部分,利用QML。
2025-02-23 08:29:34
588
原创 Qt中利用httplib调用https接口
配置头文件,库文件。关键的一句 开启ssl DEFINES += CPPHTTPLIB_OPENSSL_SUPPORT。地址如下,我Qt版本是5.15.2 ,openssl选择的是 64位(Win64OpenSSL-3_3_3.msi)httplib中如果要调用https接口,需要开启OPENSSL支持,经过半天坑爹得摸索,总结下经验。2,拷贝 bin/include/lib文件放到Qt工程中。1,下载 并安装Win64OpenSSL。5,调用https接口。
2025-02-19 09:03:29
614
原创 香橙派3 LTS GPIO使用
(3),输出电平 digitalWrite(IO_PIN, HIGH);(2),设置输出模式 pinMode(IO_PIN, OUTPUT);以7号物理引脚为例,让其变为输出,并输出 高低电平。(1),wiringPiSetup() 初始化。一,安装 wiringOP库。(1),让其变为输出模式。(3),让其输出低电平。(2),输出高电平。四,代码的方式进行控制。
2025-02-16 09:00:41
492
原创 基于Qt的仪器类测量软件架构梳理
项目的需求 就是 GUI 控制-》 传感器(轴,压力,激光位移等) 完成任务-》根据反馈的数据 判断结果。(1),将所有传感器 结构进行封装,统一交由DeviceManager 管理。(2),将用到所有数据(文件中,内存中) ,由DataManager管理。(4),UtilManager 负责全局共用的功能,比如日志,计算等。(5),将通用的数据结构,类 放到一个公用data.h 文件中。去年做了几个仪器类测量软件,现在整理当时的软件架构。(1),GUI发起 具体业务的处理。(3),将业务逻辑进行封装。
2025-02-14 16:41:31
506
原创 QML 全局统一样式的设置
想将颜色统一放到一个文件里,在纯C++中,可以弄一个配置文件,或者一个 .h文件 定义大量的宏定义。一,定义一个文件用来放置颜色 或全局需要的设置,并把这个文件声明为单例。2,main.cpp 函数 注册这个类型。黑色主题 确实显得比较高级。3,使用的地方 导入即可。
2025-02-14 13:39:43
303
原创 基于香橙派 和QML 写了一个应用
上层抽象出一个通用的Card 样式参考华为的卡片,每个独立的功能继承Card,比如温度,湿度,天气。根据以前项目经验,利用QML+香橙派重新开发一个应用,主要是为了重新梳理基于QML的程序框架。利用天聚数行的接口,用MVC模式,来展示。默认一天100次调用,个人使用足够了。单击Card 切换到对应功能的详情页,比如单击 天气,则切换到一周的天气页。并且,Card切换到详情页时 采用动态加载的方式。单击 每个详情页左上角的返回按钮,返回到主页。
2025-02-13 14:22:18
312
原创 树莓派上 基于Opencv 实现人脸检测与人脸识别
基于树莓派4b,usb1080p摄像头,实现人脸检测与人脸识别。尝试了海陵科的模组和百度的sdk。海陵科的模组无法录入人脸,浪费了100多块钱。百度的sdk 在树莓派上也无法录入人脸,官方解决不了。最后只能用opencv自己实现,因为只要实现最简单检测和识别就行,不在乎准确率。(1),加载模型 并实例化 Ptr<FaceDetectorYN> 和Ptr<FaceRecognizerSF>对象。树莓派4b opencv版本是4.5.4 ,经测试模型要使用 2021版本。这里可以做个阈值,自己调解。
2025-02-10 11:16:40
639
原创 vs封装dll 给C#使用
创建控制台应用得好处时,我们可以自己测试接口,如果接口没有问题,改成dll重新编译一遍就可以。这样可以将 所有功能,进行统一得管理。(1),用智能指针的方式,将上一步创建得类 实例化出一个对象。二, 创建一个c++ 类,将所需提供得功能 封装到类中。三,创建一个接口文件 负责对外暴漏C语言形式的接口。(2),编写C接口函数,将参数传递给上一步的实例。接口测试OK后,可以重新编译成dll ,给到C#接口封装完毕后,可再main函数进行自测。四, main 函数中 测试接口。五,编译dll 给到C#
2025-02-07 10:05:16
256
原创 基于 QGraphicsProxyWidget 的圆角 半透明控件
在QGraphicsScene中放置一组按钮,要求背景透明 并且是圆角矩形,而且具备显示/隐藏功能。四,窗口改变时 更新下位置。
2024-12-23 17:14:54
222
原创 Qt 使用modbus协议
5,此种方式 优点就是Qt原生框架,但是缺点是 这种方式是异步的方式,想要做到同步调用,比如轴系运动中,需要自己去同步,试过 QEventLoop的方式,但是不行,会丢失事件。1,因为modbus的读写 需要在同一个线程中,所以需要在主线程中利用moveToThread的方式,将业务逻辑封装到 子线程中。4, 主线程 使用moveToThread 将上述业务线程进行封装,然后主线程中 用信号,进行触发。3,继承上述类,封装业务逻辑,以压力传感器为例。//能读出数据 认为连接成功。2,modbus封装。
2024-12-16 13:09:30
1707
原创 如何将Qt pro工程文件 改成CMakeLists.txt
Qt pro工程管理文件,本人认为是很好用的,语法简洁易懂,但是只能在QtCreator中使用,想用使用其它IDE比如Clion或者vs,CMakeLists是种通用的选择,另外QtCreator的调试功能跟粑粑一样。C++ 中编译,无外乎代码本身的头文件,源文件。三方库的头文件,库文件。Qt本身自带了UI文件和qrc资源文件。CMake 无法像pro那样处理图标文件,需要先新建一个rc文件,rc文件中指明icon文件,然后加载rc文件。三,CMakeLists 文件。二,Qt pro文件。
2024-05-23 11:05:59
1934
1
原创 利用pybullet 实现ur5 仿真
想做一个机械臂仿真软件,以前利用C++ 结合FCL和OSG实现了一个半成品,但是这种方案需要根据机械臂DH参数,解析出机械臂各关节位姿然后利用OSG渲染,并且需要自己实现逆解算法,过于麻烦了。pybullet 具备了上述所有的要素,动力学引擎使用bullet,渲染使用OpenGL,并可以直接加载URDF文件,而且提供了 正逆算法。,负责机器人模型的建模,描述各机器人的连杆和关节,还有质量属性,颜色等。4,设置各关节角度,并判单是否碰撞。3,利用逆解算法,求出各关节角度。1,利用URDF文件,加载模型。
2024-05-22 13:20:36
2993
1
原创 Qt 在windows下显示中文
1,简单起见,在windows平台,如果只是windwos平台系统,直接将所有文件转成utf-8 带bom 格式,然后中文使用QStringLiteral(“中文”) 即可。某些 低于此版本的qt,上述方式会出现乱码的情况,此时需要将utf-8编码方式的文件转成utf-8 带bom。比如使用txt进行转换,但是。2,全部使用英文 如,tr(“en”),然后再去翻译文件中翻译。系统的某些版本 txt 不带此格式。格式,此环境下 中文没有问题。64位 win11系统。默认用Qt 创建的文件使用。
2024-05-21 10:04:11
1116
原创 西门子 PLC snap7 使用
2. 把examples/cpp 下的 snap7.h 和cpp 加到工程里。5. 用Hsl工具测试下,这里再M100 位置 写入了一个byte ,值为1。集成snap7库,对西门子plc进行访问。3. 封装一个单例 来使用 这个库。4. 使用的时候 直接调用业务函数。
2024-05-16 14:10:59
647
1
原创 深视 线扫相机 获取点云数据
我这里使用阻塞方式获取数据。他们还提供了非阻塞也就是回调方式获取数据,但是我的代码在线程同步的时候经常崩溃,没找到原因。还有一种是无线循环获取数据,我这里也没跑通,出来的数据不对。2,并且文档不更新,我看了好久,按照文档开发,结果不行,技术说文档太旧了。3,文档里好多代码,特别度的魔数,突然出现一个数字,也不解释啥意思。最近项目上用到了深视的线扫相机,集成了三天才搞定,分享下代码。顺便吐槽一下,想用相机取图,这么简单的功能,搞得如此麻烦。1,文档有三份,就不能集成到一份么,维护起来也简单。
2024-05-12 09:54:05
852
1
原创 QML 本地存储(Setting,sqlite)
3,main.cpp 中 指定下数据库的保存路径,比如当前路径。不指定的话,会默认存到系统路径,不太好找。跟QWidget 中的QSettings 一样,可以简单的存储一些配置。main.cpp 中需要 定义 应用程序名称,公司名称,域名称。2,使用的时候 引入js 文件,之后直接调用接口就可以了。按钮移动时将x y 保存到Settings 中。下次加载页面时 从Settings 读取位置。可以存储一些复杂的数据。1,将数据库操作 单独封装成一个js文件。我们以一个按钮的位置为例,进行讲解。
2024-05-07 15:14:41
1357
原创 PyQt程序的打包
F表示生成单文件模式,即只有一个可执行文件,比如windows下的exe。-n表示指定输出文件名,例如-n app.exe。-i表示指定图标文件,例如-i icon.ico。-w表示生成窗口模式,即不显示控制台窗口。打包后的程序位于 dist文件下。记录下PyQt程序的打包。
2024-05-06 09:01:46
475
原创 PyQt 入门
Python体系下GUI框架也多了去了,PyQt算是比较受欢迎的一个。如果对Qt框架熟悉,那掌握这套框架是很简单的。使用designer工具创建ui文件。随便放几个控件,然后保存到工程目录下,取名为widget.ui。python下UI文件无法直接使用,需要使用这个工具转成py文件。2.Designer UI工具。3.UI文件转py文件工具。2.UI文件转py文件。3,主程序加载py文件。
2024-05-06 08:59:39
537
1
原创 windows下其它软件的自动打开与点击
项目要用到第三方软件,这个软件没有提供SDK,只提供了两个exe,每次开机后需要启动这两个exe,并且还要点击上边的两个按钮。这样的用户体验怎么能让人接受呢,如果查资料,发现windows提供了接口,可以自动化操作。窗体标题 或者句柄 可以使用 Spy++ 这个工具获取。
2024-04-29 08:57:32
376
原创 树莓派下开机自启的Qt程序配置
比如我们的程序在test文件夹内,内部含有完整的Qt应用程序及依赖库,我们在同级目录下创建一个安装脚本 install.sh。我们需要编写一个脚本用于安装qt打包后的程序,也就是整个文件夹。脚本的作用就是将文件夹拷贝到指定的位置。我们需要编写两个脚本,来启动和停止我们的应用。这里假设我们的应用名称为test。Qt开发的GUI程序,部署到树莓派中,并设置开机自启。1,制作启动脚本和停止脚本。
2024-04-29 08:56:16
926
原创 一篇文章 学会Qt 样式表(qss)
QML 中风格和主题的设计可以通过配置文件选择现有几种中的一种,或者直接在控件定义时,指定其属性,如背景颜色或者字体大小。在QWidget框架中,则通过了一种叫做qss样式表的东西来进行描述,跟CSS逻辑上类似。那这个谁,有好多种写法,比如所有按钮,某个按钮,按下的按钮。而这个样子又有好多,比如背景色,边框,圆角等。2,字体 一般是一个全局的设置,所以可以在此处设置全局字体。1,新建一个qss文件,并添加到资源里。然后在main函数中,进行全局的设置。3,我们以如下的窗口来举例说明。
2024-04-28 10:43:57
938
原创 QML中调用HTTP请求
涉及到Http请求,第一反应可能是使用Qt的QNetworkRequest和QNetworkReply实现,然后QML再与其交互,但是这样过于麻烦了。其实QML自己已经具备了http网络请求访问的功能。而且使用起来很方便。主要是利用XMLHttpRequest这个类,请求接口,然后将返回的数据解析成json对象(JSON.parse),之后就可以像js一样去拿json对象里的数据了,当然前提是接口返回得数据是json。我们这里举一个访问天气接口,然后解析其数据的例子。
2024-04-25 16:55:31
1126
原创 利用FCL实现更加精准的碰撞检测
我们看如下这张图,碰撞的逻辑就是,在一个三维场景中,构造一个实体,比如下边的BoxA,然后在物理引擎比如bullet中,或者专用的碰撞检测库中也构造一个对应的实体,比如BoxB。之前用bullet做个尝试,基本的图形能满足需求,比如球,盒子,但是项目中涉及到点云的碰撞,而bullet中处理点云,没有找到好的处理方式。但是FCL可以将点云转变成fcl中对应的实体,因此最终选择了FCL进行碰撞检测,这里列出FCL中大概的步骤。因此我们在FCL中构造对应实体的时候,可以直接用三角面。1,FCL中构造实体。
2024-04-25 10:23:39
2855
4
原创 QML 中的状态
使用QWidget的思路去实现就是在按钮click对应的槽函数中,依次获取三个button的指针,然后改变其颜色,这样也能实现,但是不够优雅。QML的思路是,全局定义一组状态,然后每个状态来控制具体的属性,使用时只要切换不同状态就可以了,后续修改的话,只需要修改这个全局状态就行,并且三个按钮集中暴露在这组状态中。状态描述了当前用户界面样子,QML中一个状态定义了一组属性的改变,并且会在一定条件下被触发。//红灯状态 红灯亮 其它灭。//定义一组状态 规定每个状态下 的属性。//依次切换三个状态。
2024-04-25 09:00:32
754
qtenginio-opensource-src-1.6.2.rar
2020-07-18
QML 安卓应用 135todo
2018-03-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人