自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 回调函数基本实现

回调函数(Callback Function)是一段可以在将来某个时间点被调用的代码。它通常作为参数传递给另一个函数(称为高阶函数或接受函数),并在需要的时候(比如某个操作完成或事件发生时)由那个函数来调用。基本思想:“不要返回我结果,当你有结果时,请调用这个函数,并将结果作为参数传递给它。

2024-08-29 18:02:57 203

原创 set容器

std::set 是一个关联容器,它用于存储唯一的元素,并且元素会按照一定的顺序自动排序。它基于平衡二叉树(通常是红黑树)实现,因此具有对数时间复杂度的插入、删除和查找操作。

2024-08-21 21:37:35 325

原创 stack/queue容器

std::stack是 C++ 标准库中定义的容器适配器(container adaptor),它基于其他底层容器(如std::dequestd::list或)实现了后进先出(LIFO)的数据结构。

2024-08-21 21:33:09 241

原创 list容器

list是一种将数据进行链式存储的数据结构,被称为链表(双向循环列表),链表的存储方式不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器,不支持+2,支持++。 插入和删除操作都不会造成原有的迭代器失效 , 这在vector中不成立,因为vector的动态扩容机制会改变原有数据的存储地址,地址改变了,迭代器自然失效了

2024-08-21 21:30:39 221

原创 map/multimap容器

作为关联式容器的一种,map容器存储的都是pair对象,也就是用pair类模板创建的键值对。其中各个键值对的键和值可以是任意数据类型,包括基本输出类型、结构体或自定义的类型。通常情况下,map容器中存储的各个键值对一般使用string字符串作为键的类型。默认情况下,map容器选用排序规则(其中T表示键的数据类型),会根据键的大小对所有键值做升序排序。根据实际形况需要,也可以手动指定map容器的排序规则,选用STL标准库中提供的其他排序规则(例如),也可以自定义排序规则。

2024-08-21 21:28:11 791

原创 deque容器

deque 是 C++ 标准库中的双端队列(double-ended queue)容器,提供了在两端进行插入和删除操作的功能。

2024-08-21 21:24:47 706

原创 【QT文件操作】---xml文件读取

XML(可扩展标记语言,eXtensible Markup Language)是一种用于存储和传输数据的文本格式,广泛用于配置文件、数据交换和文档表示。XML 文件具有明确的结构和标记,这使得它能够描述复杂的层次结构和数据关系。

2024-08-21 21:16:54 805

原创 【OpenGL学习笔记】--图像管线

图像管线(Image Pipeline)是计算机图形学中一个核心概念,尤其是在图形处理和渲染的上下文中。它是一个用于处理和渲染图像的流程,其中包括从场景数据的输入到最终图像输出的各个阶段。

2024-08-20 21:35:55 650

原创 QT信号槽函数存在重载时编译报错

当信号槽函数存在重载时,编译错误通常是由于编译器无法确定应使用哪个重载。QOverload 是 Qt (Qt 5.10 及以上)提供的一个工具,用于简化重载槽函数的连接。它帮助选择具有特定参数类型的重载槽函数。

2024-08-11 18:36:15 147

原创 QMainWindow使用setCentralWidget导致程序崩溃

在QMainWindow中使用setCentralWidget时,当出现主界面切换时,再次设置setCentralWidget时,需要先使用takeCentralWidget去掉原来的设置,才能再次使用setCentralWidget。做登录注册界面跳转时,使用QMainWindow的中心界面显示登录注册界面,使用setCentralWidget从登录跳转到注册再跳转回来时,setCentralWidget发生崩溃。

2024-07-30 22:27:26 212

原创 CAN通信

CAN(Controller Area Network,控制器局域网络)通信是一种专门设计用于高速实时数据传输的串行通信协议。

2024-07-29 22:14:17 2087

原创 设计模式---工厂模式

工厂模式是一种创建型设计模式,用于创建对象而无需指定具体创建的类。它通过提供一个共同的接口来创建对象,但允许子类决定实例化哪个类。工厂模式的主要目的是将对象的创建和使用分离,以便代码更容易扩展和维护。

2024-07-29 18:03:46 855

原创 设计模式---单例模式

单例模式是一种创建型设计模式,它确保类只有一个实例,并提供一个全局访问点来访问这个实例。在单例模式中,类的构造函数被设为私有,这样外部代码就无法直接实例化该类。而是通过类的静态方法来获取类的唯一实例。如果该类的实例还不存在,则静态方法会创建一个新实例并返回,否则直接返回已经存在的实例。这样可以确保在整个应用程序中只有一个特定类的实例存在。

2024-07-29 17:29:35 463

原创 图像边缘检测

边缘检测是数字图像处理中的一项基本任务,其目的是识别和定位图像中明显变化的区域,即图像中物体的边缘或轮廓。这些边缘通常表示图像中亮度、颜色或纹理等属性发生显著变化的地方,是图像分析和计算机视觉中很重要的一部分。在进行边缘检测时,主要目标是从图像的像素值中找到这些变化的位置。边缘通常是物体之间的边界或物体内部重要的特征。边缘检测在各种图像处理和计算机视觉任务中都有广泛应用,包括但不限于:物体识别与分割:边缘检测可以帮助在图像中定位和分割不同的物体或区域,为后续的目标识别或分析提供基础。

2024-07-24 16:54:00 730

原创 形态学分析

在 OpenCV 中,形态学(Morphology)是一种图像处理技术,主要用于处理图像中的形状和结构。形态学操作基于图像形状的形态学特征,如点、线、曲线等,而不是像素值。形态学操作通常用于图像预处理、分割、边缘检测等任务,特别是在处理二值图像(如边缘检测后的图像)时特别有效。OpenCV 中常见的形态学操作主要包括腐蚀、膨胀、开闭操作、形态学梯度、黑帽与顶帽、击中与不击中等。

2024-07-23 12:10:32 928

原创 std::async和std::future异步编程

异步操作:指的是不会立即完成,而是会在将来的某个时间点完成的操作。在 C++ 中,异步操作可以通过多种方式实现,比如使用 std::async、std::thread 配合std::promise/std::future,或者第三方库如 Boost.Asio。

2024-07-14 16:57:33 656

原创 ubuntu配置OpenCV

请注意,上面的步骤是基于OpenCV 3.4.X的安装。如果你需要安装OpenCV的其他版本,请替换相应的版本号。

2024-07-12 13:56:17 223

原创 QVector实现循环队列

【代码】QVector实现循环队列。

2024-06-04 15:26:26 137

原创 头文件循环包含问题

在使用vs开发qt的时候需要在两个界面类分别实现两个界面,并需要在这两个界面之间来回跳转,这就需要解决头文件循环包含的问题。

2024-04-13 15:09:38 202

原创 向上向下采样

在数字图像处理中,向上采样(upsampling)和向下采样(downsampling)是两种常见的操作,用于改变图像的分辨率。向上采样(Upsampling):向上采样是指增加图像的分辨率,通常通过插值方法在图像中插入新的像素来实现。常见的插值方法包括最近邻插值、双线性插值和双三次插值等。通过向上采样,可以增加图像的细节和清晰度,但同时也增加了图像的计算量和存储空间。向下采样(Downsampling):向下采样是指降低图像的分辨率,通常通过从图像中删除一些像素来实现。

2024-04-08 21:20:04 535

原创 【QT多线程】---线程实现方式

创建一个新的类,继承自QThread,并重写其run()函数。在run()函数中编写多线程需要执行的代码。在界面或其他需要的地方,创建一个MyThread对象,并调用其start()函数来启动线程。如果需要在主线程中处理线程完成的信号,可以连接线程的finished()信号到相应的槽函数。退出线程,停止底层的事件循环。

2024-04-07 15:41:21 1771

转载 Protobuf的使用

protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python 等,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

2024-04-03 16:47:36 175

原创 图像翻转、旋转、混合

在OpenCV中,图像翻转可以使用cv::flip()函数来实现。cv::flip()函数可以将图像在水平或垂直方向进行翻转操作。

2024-03-31 20:52:07 345

原创 图像滤波的使用

图像滤波通过改变图像中像素点的值来实现去噪、平滑、锐化和边缘检测等目的,根据空间滤波的特性分为:线性滤波和非线性滤波简单来说,图像滤波就是将一个窗口(也称为卷积核)在图像上滑动,对每个窗口内的像素进行计算,并取得计算结果替代原像素值,从而改变图像的特征。

2024-03-31 20:47:16 455

原创 【QT文件操作】---Json文件读取

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前端与后端之间的数据传输。它以简洁、易读的文本格式来表示结构化数据,通常由键值对(key-value pairs)组成,支持数组(array)和嵌套对象(nested objects)。JSON具有广泛的应用,特别在Web开发中被广泛使用。JSON的语法规则简单明了,常见的数据类型包括字符串、数字、布尔值、null、数组和对象。它可以表示复杂的数据结构,并且易于解析和生成。

2024-03-31 10:48:16 770

原创 委托、继承、移动构造函数

委托构造函数是指一个构造函数可以调用同一个类中的另一个构造函数来完成部分或全部的初始化工作。通过使用委托构造函数,可以避免重复编写相似的初始化代码,提高代码的可维护性和可读性。

2024-03-30 20:45:33 177

原创 左值引用和右值引用

左值(lvalue)和右值(rvalue)是表达式的两种基本分类方式,这些术语主要用于解释赋值语句和函数调用的操作对象。

2024-03-30 20:43:27 334

原创 视频读写和录制

在opencv中视频读写常用videoCapture类,用于读取视频文件和图像序列、相激捕获视频的类。

2024-03-29 22:51:18 423

原创 图像编码和解码

在 OpenCV 中,可以使用不同的编码方式对图像进行编码和解码。常见的图像编码方式包括 JPEG、PNG、BMP 等。

2024-03-29 22:34:00 1233

原创 Mat类及图形绘制

OPenCV直接提供常用的Mat类来存储矩阵类型,其中包括矩阵、向量、图像等数据信息。Mat类由两部分组成:矩阵头和指向像素数据的矩阵指针。

2024-03-29 22:30:58 510

原创 模板的基本使用

在 C++中,模板能够定义一种适用于不同类型对象的行为。这听起来有点像宏,但宏不是类型安全的,而模板是类型安全的。

2024-03-29 21:13:18 900

原创 垃圾回收与智能指针

C++11 引入了三种主要的智能指针类型:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。

2024-03-29 17:10:52 745

原创 类型转换运算符

类型转换运算符是一种特殊的成员函数,用于自定义类对象之间的显式类型转换。通过定义类型转换运算符,可以使得类对象能够像基本数据类型一样进行类型转换操作。

2024-03-28 15:36:05 477

原创 vector的使用

vector是一个模板类,提供了动态数组的通用功能,具有如下特点:1. 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此2. 在数组中间添加或删除元素所需的时间与该元素后面的元素个数成正比.3. 存储的元素数是动态的,而 vector 类负责管理内存

2024-03-28 11:37:58 1163

原创 std::string类常用操作

std::string 是 C++ 标准库中的一个类,用于表示和操作字符串。使用 std::string 类可以方便地进行字符串的创建、修改、连接、查找等操作,而且相较于传统的 C 语言风格的字符串操作,std::string 提供了更多的便利和安全性。

2024-03-28 11:32:26 2185

原创 标准模板库(STL)介绍

STL的六大组件:容器、算法、迭代器、适配器、仿函数、空间配置容器

2024-03-28 11:22:50 807

原创 linux常用基本命令

killall 命令用于终止指定名称的进程,它可以根据进程的名称来结束运行中的进程,而不需要知道进程的 PID(进程 ID)。chgrp 命令用于更改文件或目录的所属组(group),只有超级用户或文件的所有者才能更改文件或目录的所属组。rm 命令用于在 Linux/Unix 系统中删除文件和目录,rm 命令删除的文件和目录将无法恢复。用来搜索指定模式的文本的命令,它可以在文件中搜索特定字符串或者从标准输入读取数据并进行匹配搜索。-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)

2024-03-12 16:41:15 819 1

原创 Modbus RTU协议

Modbus RTU(Remote Terminal Unit)是Modbus通信协议的一种变体,用于串行通信。它定义了在串行通信中传输Modbus消息的规则和格式。Modbus RTU协议采用二进制形式传输数据,使用RS-232或RS-485等串行通信接口。

2024-03-12 11:26:00 895

原创 modbus TCP协议

Modbus是一种通信协议,用于在自动化设备之间进行数据传输。它是一个开放的通信协议,被广泛应用于工业自动化领域。Modbus协议定义了一个主从结构,其中一个设备充当主设备发送请求消息,而其他设备则充当从设备响应请求。Modbus支持不同的物理层传输,如串行通信(RS-232、RS-485)和以太网通信。常见的Modbus变体包括Modbus RTU(基于二进制数据传输)和Modbus TCP(在以太网上运行)。

2024-03-12 11:24:20 2470

原创 qt实现RS-232串口通信

串口(Serial Port)是计算机用于与外部设备进行数据通信的一种通信接口。它是一种通过逐位传输数据的方式来进行通信的接口,与并行口(Parallel Port)相对。串口通常用于连接各种外部设备,如调制解调器、打印机、传感器、嵌入式系统等。

2024-03-12 11:18:34 1428

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除