- 博客(121)
- 资源 (1)
- 收藏
- 关注
原创 OpenCv之图像缩放翻转和拼接
本文介绍了图像处理中的基本操作原理及实现方法。图像插值算法是缩放和旋转的基础,包括最近邻、线性、双线性、双三次和Lanczos插值,各有优缺点和适用场景。双线性插值是OpenCV默认方法,通过二维线性加权计算非整数坐标像素值。图像缩放使用cv::resize()函数,可通过指定尺寸或比例实现。图像翻转通过cv::flip()实现水平、垂直或同时翻转。图像拼接使用hconcat()和vconcat()函数,要求输入图像具有相同的高度或宽度。最后给出了包含缩放、翻转和拼接操作的代码示例,展示了这些基本图像处理技
2026-03-16 22:47:24
356
原创 OpenCv之查表法LUT
摘要:本文介绍了LUT(查表法)在图像处理中的应用。LUT通过预定义映射表实现像素值的快速转换,支持单通道或多通道独立处理。核心应用包括:1)色彩校正与滤镜效果;2)图像增强与缺陷检测;3)动态范围压缩(伪彩色成像);4)实时二值化处理。文中提供了过曝光修复和复古滤镜两个实例,展示了如何通过构建对数变换、伽马校正等LUT表实现高效图像处理。该方法计算速度快,适合工业视觉和实时处理场景。
2026-03-13 22:19:29
385
原创 OpenCv之图像二值化
本文介绍了图像二值化的核心概念及OpenCV中的实现方法。二值化是将灰度图像转换为纯黑白图像的过程,通过设定阈值区分前景和背景。OpenCV提供固定阈值二值化(cv::threshold)和自适应阈值二值化(cv::adaptiveThreshold)两种主要方法,其中固定阈值法又包含手动设定和自动计算最优阈值(Otsu/三角法)两种方式。文章详细说明了各方法的函数参数和使用场景,并通过测试代码展示了不同方法在lean图和文档处理中的效果对比,包括THRESH_BINARY、THRESH_OTSU和ADAP
2026-03-09 23:20:08
395
原创 OpenCv之两图像像素操作与运算
本文介绍了OpenCV中常用的图像处理函数及其应用场景。主要内容包括:1) 逐像素比较函数cv::min()和cv::max(),用于图像融合、降噪、亮度调整和区域提取;2) 极值查找函数cv::minMaxLoc(),用于分析图像亮度、定位目标和验证分割结果;3) 像素位运算函数bitwise_and/or/not/xor,实现图像反色、掩膜抠图、区域合并和差异检测等操作。文中通过具体代码示例展示了这些函数在噪声抑制、亮度调整、水印添加等实际应用中的使用方法,为图像处理提供了多种实用技术方案。
2026-03-08 11:56:02
376
原创 OpenCv之多通道的分离与合并
本文介绍了OpenCV中多通道图像处理的基本操作。主要内容包括:1)使用cv::split()函数实现多通道分离;2)使用cv::merge()函数进行通道合并;3)通过代码示例展示如何单独处理蓝色通道;4)演示红色通道增强方法;5)基于HSV色彩空间的图像处理,包括饱和度增强和色调替换。文章重点讲解了在BGR和HSV色彩空间下进行通道分离、修改和合并的技术细节,并提供了完整的代码实现,帮助读者掌握图像通道处理的实用技巧。
2026-03-07 12:22:53
188
原创 OpenCv之图像颜色空间介绍
本文介绍了OpenCV中常用的颜色模型及其转换方法。主要内容包括:1)RGB颜色模型,重点说明OpenCV默认使用BGR顺序及转换方法;2)HSV颜色模型的特性及其在视觉感知上的优势;3)灰度模型的工业应用场景;4)颜色空间转换函数cvtColor()的使用方法和常见转换示例。文章详细讲解了不同数据类型间的转换公式和参数设置,并提供了实际代码示例,帮助理解如何在RGB、HSV和灰度模型间进行转换,以及如何处理不同库之间的颜色顺序差异。
2026-02-12 08:53:54
638
原创 OpenCv中图像I/O和显示
本文摘要: OpenCV图像与视频处理基础教程包含四部分内容:1)图像处理:详细介绍imread()读取、namedWindow()创建窗口、imshow()显示和imwrite()保存图像的方法;2)调试工具:推荐使用ImageWatch插件进行高效调试;3)视频处理:讲解VideoCapture读取视频/摄像头、VideoWriter写入视频以及视频属性获取方法;4)代码示例:提供完整的图像加载显示、视频播放和摄像头采集保存的代码实现。教程涵盖了OpenCV中最基础的I/O操作,包括参数说明、注意事项和
2026-02-11 09:10:30
959
原创 OpenCv中的Mat容器
OpenCV中的Mat类是用于存储矩阵数据的核心数据结构,代表图像和矩阵。它支持多种数据类型(CV_8U、CV_32F等)和构造方式(空矩阵、指定尺寸、深/浅拷贝等)。Mat类提供多种像素访问方法(at<>()、指针访问等)和矩阵运算功能(加减乘除、转置、求逆等)。Scalar类用于初始化矩阵和传递多值参数。Mat对象可通过rows、cols获取尺寸,支持通道拆分/合并等操作。矩阵运算需注意数据类型和尺寸匹配,逐元素操作与线性代数运算的区别。该数据结构是OpenCV图像处理的基础,灵活高效地支持
2026-02-10 23:27:22
914
原创 OpenCV下载和环境搭建
本文介绍了OpenCV的安装配置及基础使用方法。主要内容包括:1)OpenCV的下载步骤;2)库目录和环境变量配置方法;3)Visual Studio中的配置过程;4)提供了一个基础图像读取和显示的示例代码,演示如何通过imread()加载图像、imshow()显示图像以及waitKey()等待用户输入。该示例展示了OpenCV最基本的图像处理功能,为后续开发奠定基础。
2026-02-10 20:54:42
224
原创 项目国际化中QLocale的使用
本文介绍了Qt框架中QLocale模块在停车收费软件国际化中的应用。针对不同国家地区在货币、数字和时间格式上的差异,通过LocalManager单例类封装QLocale功能,实现了多国本地化支持。重点解决了时间显示受操作系统时区影响的问题,提出使用固定英语区域格式化的解决方案。文章包含完整的代码实现,展示了价格格式化、时间转换等核心功能,为跨地区软件开发提供了实用参考。
2025-11-24 15:01:41
219
原创 项目开发中QTest单元测试的使用
本文介绍了Qt测试框架QTest在GUI项目中的应用优势及其核心功能。针对Qt深度集成的项目,QTest相比GoogleTest在GUI测试方面更高效,支持轻量化宏驱动和数据驱动测试。文章详细说明了QTest的断言宏、数据驱动测试宏(addColumn/newRow/QFETCH)、GUI交互模拟宏(键盘鼠标操作)以及性能测试宏(QBENCHMARK)的使用方法,并提供了一个完整的测试类实现示例,展示如何测试计算器功能,包括数据驱动测试、信号验证和GUI交互测试。最后通过QTEST_MAIN宏简化测试执行流
2025-11-22 10:50:28
748
3
原创 托盘程序在实际项目中的应用
本文介绍了在停车场项目中运用系统托盘功能的实现方法。通过Qt的QSystemTrayIcon类,可以方便地创建托盘图标,实现最小化到托盘而非退出的功能。文章详细说明了图标控制、提示信息、消息通知和右键菜单等核心功能,并提供了代码示例。在实际应用中,通过拦截关闭事件实现窗口隐藏到托盘,同时支持双击唤醒主界面。该方案有效解决了后台程序运行期间界面干扰问题,特别适合需要长期运行的服务类应用程序。
2025-11-03 14:41:24
942
原创 QGraphicsEffect控件添加特效
本文介绍了Qt中的QGraphicsEffect图形效果框架及其常见子类的应用。QGraphicsEffect作为基类,可在不改变控件几何结构的情况下实现阴影、模糊、着色和透明度等视觉效果。具体讲解了四种常用子类:QGraphicsDropShadowEffect设置阴影效果,QGraphicsBlurEffect实现高斯模糊,QGraphicsColorizeEffect用于整体着色,以及QGraphicsOpacityEffect控制透明度。文中提供了详细的代码示例,包括参数设置说明和与QPropert
2025-10-28 17:58:54
551
原创 音视频开发SDL概述(三)
本文介绍了使用SDL库播放音频的基本流程。首先概述SDL作为跨平台多媒体开发库的功能特点,然后详细说明播放音频的步骤:1)初始化SDL音频子系统;2)配置SDL_AudioSpec参数包括采样率、声道数等;3)实现音频回调函数处理数据填充;4)打开音频设备并开始播放。重点讲解了音频回调函数的实现机制,包括缓冲区管理、数据解码和混音处理。最后给出了一个完整的音频播放示例代码,展示如何结合FFmpeg解码音频帧并通过SDL进行播放。文章为多媒体开发者提供了SDL音频播放的实用指南。
2025-08-29 11:23:00
811
原创 FFmpeg的基本概述(二)
FFmpeg是一个开源的音视频处理框架,包含libavformat、libavcodec等核心模块,支持多种编解码器。其视频解码流程包括:注册组件、打开输入文件、获取视频信息、查找解码器、读取数据包、解码帧数据、格式转换和渲染。关键结构体包括AVFormatContext、AVPacket、AVFrame等,通过函数如avformat_open_input()、avcodec_send_packet()等实现解码功能。解码完成后需释放相关资源,如使用av_frame_free()等函数。FFmpeg提供强大
2025-08-20 16:17:02
415
原创 音视频开发基本概念(一)
本文系统介绍了音视频技术的基本概念和原理。主要内容包括:1)视频基础概念,如码率、帧率、分辨率、编解码器、I/P/B帧等;2)色彩空间,重点讲解RGB和YUV格式及其转换方法;3)音频基础,包括采样率、比特率、声道数等概念;4)常见封装格式如MP4、FLV等;5)音视频同步原理及时间戳机制。文章深入浅出地阐述了音视频从采集、编码到存储播放的全流程技术要点,为理解多媒体处理提供了全面的基础知识框架。
2025-07-31 10:48:42
921
原创 项目优化中对象的隐式共享
本文介绍了Qt框架中通过继承QSharedData实现自定义数据隐式共享的方法。Qt内置类型如QString采用隐式共享技术(读时共享,写时复制)提升性能和内存效率。开发者可让自定义类继承QSharedData,并用QSharedDataPointer管理数据,实现类似特性。文章详细展示了PersonData类的实现过程,包括数据定义、指针管理和测试用例,并对比了与std::shared_ptr的区别。最后总结了Qt隐式共享的优势:提升内存效率、优化性能、简化API,并给出了实际开发中的使用建议。
2025-07-29 16:22:04
203
原创 Qt WebEngine Widgets的使用
Qt WebEngine中主要分为三个模块:Qt WebEngine Widgets模块,主要用于创建基于C++ Widgets部件的Web程序;Qt WebEngine模块用来创建基于Qt Quick的Web程序;Qt WebEngine Core模块用来与Chromeium交互。网页玄幻和JavaScript的执行从GUI进程分离到Qt WebEngine进程,主要架构如下。
2025-07-24 19:30:45
665
1
原创 静态库和动态库的创建和调用方法
在移动交通项目上有许多设备需要使用,如在高速收费站往往需要多目相机、ETC、电子地秤和道闸等等设备,上层软件往往需要集成这些设备进行收费站软件项目方案的集成,每个地区指定的方案不同,采购的设备类型和指定的厂商往往不同,但是作为供应商针对不同的地区要求需要做好设备的接口适配这些需求,其中最常见的即采用动态库或静态库,通过上层软件指定的接口协议对设备功能进行封装,同时配合上层软件调试达成项目目的。
2025-07-19 08:47:11
406
原创 项目优化之开机自启动
摘要:本文介绍了在Windows系统中实现Qt程序开机自启动的方法。通过修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run路径实现自启动功能,并提供了使用QSettings操作注册表的具体代码示例。文章还强调了需要管理员权限才能访问注册表,以及在64位系统上32位程序可能遇到的注册表重定向问题。该方案特别适用于无人值守的停车管理系统等需要自动恢复运行的场景。
2025-07-18 13:57:38
415
原创 对象创建控制
在实际项目中对于一些对象需要在栈上创建,避免在堆上创建引起不要的内存泄露风险;同时一些对象由于生命周期在整个软件运行期,不适合在栈上创建只能在堆上创建;以下针对两种情况进行阐述和代码实践。
2025-07-17 10:33:56
218
原创 项目中PostGreSql数据库的维护
实际交通项目中PostGreSql数据库中的车辆相关数据每天不断更新增加,长此以往数据库的查询插入更新等效率会逐渐增加,相关数据库操作的TimeBenck也会频频爆出耗时日志。除此之外磁盘存储的坏道,数据的丢失,索引的损坏,数据库的断电崩溃等等也会引起数据库连接问题,对于一些大型商业停车场会带来较大的损失。以下记录实际中常用的一些排查维护方法。
2025-06-19 16:14:35
1102
原创 项目开发中一些python测试脚本
在实际项目开发中由于排期和开发进度等和不具备测试环境等原因需要单独进行模拟测试;此时python撰写脚本进行测试环境模拟是一种比较方便的方式。以下是一些测试中常用的脚本总结。
2025-06-13 16:53:42
167
原创 MVC框架在项目数据处理中的应用
本文介绍了MVC(Model-View-Controller)架构及其在Qt框架中的实现。MVC将数据与界面分离,Qt4引入的model/view架构简化了这一模式,通过模型索引访问数据,并使用委托处理用户输入和自定义渲染。文章详细说明了模型、视图和委托的交互方式,以及如何通过QAbstractItemModel和QAbstractItemView实现标准化接口。最后,以员工管理系统为例,展示了如何通过自定义委托(如SpinBoxDelegate和ComBoxDelegate)实现不同视图(列表、表格、树形
2025-05-06 17:11:11
178
原创 项目优化中ini配置文件解析器
在停车管理项目中不同道闸口的终端配置可能不同,如靠近居民楼的道闸终端LED的语音播报音量和靠近马路的道闸门口不同;不同终端道闸锁闸时间也可能不同,诸如此类放在数据库中,不同的终端在启动时必须先连接到数据库才能加载,远没有本地配置文件方便,也不如配置文件方便技术支持修改方便,对于此类本地化配置的参数需要进行提取改写到本地配置文件中。
2025-04-17 23:42:20
750
原创 Qt图形视图框架在项目中的应用
Qt图形试图框架是Qt库中用于创建2D图形用户界面的模块。它提供了丰富的绘图功能,支持绘制形状、文本、图像以及处理复杂的图形效果。通过使用Qt Graphics View框架,开发者可以构建交互式和动态的图形应用程序,如绘图软件、地图应用和数据可视化工具等。
2025-03-21 16:50:36
444
原创 提升客户端程序性策略
在停车项目中随着过车的增加,程序运行时间的累积,程序可能会越来越慢,降低过车效率,针对此进行一些优化,先打个标记待后续空闲进行记录。
2025-03-05 23:10:15
115
原创 C++ 内存序在多线程中的使用
C++11中的内存序(Memory Order)为开发者提供了工具,帮助控制多线程程序中不同线程之间的内存操作顺序,从而避免由于编译器或处理器优化导致的指令重排问题。这些内存序提供了从无序到严格一致的内存访问保证,让程序员能够在性能和安全性之间进行权衡。本文将详细介绍C++中的六种内存序,并通过实际例子补充说明它们的应用场景。
2025-03-05 23:06:05
1338
原创 提升C++项目编译速度
提高程序编译效率一方面从代码文件管理方面不断降低不同文件之间的依赖关系,另外一方面从代码的业务层面剥离剧烈变动的业务逻辑和相对稳固的代码框架,尽可能的将变化部分小范围可控,尽可能的降低耦合度,这方面设计模式的使用是一个不错的选择。此外一些编译器上的配置如开启多核编译等以及一些加速编译的工具也有一定的效果,此处不详谈这方面。https://blog.csdn.net/WSTONECH/article/details/143989953文章浏览阅读282次。
2025-02-22 23:16:32
1456
原创 QSplashScreen --软件启动前的交互
QSplashScreen 是 Qt 中的一个类,用于显示启动画面。它通常在应用程序启动时显示,以向用户显示应用程序正在启动的状态。启动画面可以是一个图片,也可以是一个包含了文本、图片等内容的窗口。//slots//protected 可以继承自绘。
2025-02-21 17:07:08
1207
原创 Qt程序退出相关资源释放问题
通过重写主界面的这个函数可在窗口关闭前执行一些自定义的操作,比如询问用户是否真的要关闭窗口,或者保存未保存的数据。如果该窗口是主窗口,且所有子窗口都已关闭,应用程序会退出,退出前会触发和aboutToQuit信号。• 当调用quit()时,它会退出主事件循环,触发QApplication::exec()返回,并关闭所有打开的窗口。• quit()通常用于在应用程序中实现“退出”功能,比如在菜单项的“退出”操作上绑定这个函数。• close()适用于关闭单个窗口或控件的场景,比如“关闭”按钮的操作。
2025-02-20 16:18:34
1596
原创 CRTP在项目优化中的使用
CRTP 全称,即奇异递归模板模式。是一种 C++ 编程技巧,使用模板类和继承的组合来实现。该模式的关键思想是:在模板类的定义中,模板参数是当前类自身(通常是派生类)。这个技巧通常用于实现编译时多态,优化性能,C++中std:: enable_shared_from_this 也是一种CRTP的实践。。
2025-02-19 21:45:26
971
原创 PostgreSql数据库执行统计
在实际项目中为了确保软件长时间正常运行,监控数据库的执行情况非常有必要,这个扩展可以帮助你识别最频繁运行的查询、哪些查询消耗的时间最长,以及系统的整体工作量,从而对性能瓶颈进行诊断和优化。PostgreSql的pg_stat_statements插件提供一种方法追踪一个服务器所执行的所有 SQL 语句的执行统计信息,可以用于统计数据库的资源开销,分析TOP SQL。
2025-02-17 16:48:21
320
原创 内存池和对象的使用
Boost.Pool 包含一些用于管理内存的类。虽然 C++ 程序通常用于 new 动态分配内存,但内存提供方式的详细信息取决于标准库的实现和操作系统。例如,使用 Boost.Pool,您可以加速内存管理,从而更快地为程序提供内存。Boost.Pool 不会更改操作系统的行为 new。Boost.Pool 会首先从操作系统请求托管内存 - 例如,使用 new .从外部来看,您的程序已经分配了内存,但在内部,内存还不是必需的,而是交给 Boost.Pool 来管理它。
2025-02-14 15:31:45
1167
原创 Qt中QApplication 类和uic、moc程序
这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。有时候新增的类,编译器由于某种原因一直生成不了moc_xxx.cpp文件,此时可以手动调用moc程序解决。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。,程序中真正是通过这个类去控制界面文件,而不会直接操作界面文件。的形式记录界面的控件、属性、位置和布局等等,而实际。管理图形用户界面应用程序的控制流和主要设置。文件生成相关类文件ui_xxx.h。应用程序的初始化和结束。
2025-02-14 09:53:17
594
原创 Qt事件机制
事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。Qt 程序需要在main()函数创建一个QApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt。
2025-02-13 22:39:13
1307
原创 轻量级TinyXml2的应用
TinyXML2 是 simple、small、efficient 的基于DOM (Document Object Model,文档对象模型) 的开源 C++ XML文件解析库,可以很方便地应用到现有的项目中。目前,TinyXML1 开发已经停止,所有的开发都转移到了 TinyXML2。TinyXML2 适用于大部分 C/C++ 的项目,经得住考验,是最好的选择。较 TinyXML1 而言,TinyXML2 化繁为简,使用时,而 TinyXML1 需要包含 6 个文件,一般生成静态链接库供项目使用。
2025-02-13 19:50:03
474
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅