- 博客(36)
- 问答 (3)
- 收藏
- 关注
原创 opencv的加、减、溶合、位运算
对两幅图像的像素值相加(饱和操作,防止溢出)。:计算两幅图像差的绝对值(用于差异检测)。:对两幅图像的像素值相减(结果非负)。:通过掩膜(Mask)控制混合区域。
2025-04-05 10:36:54
868
原创 opencv中mat深拷贝和浅拷贝
/ 输出 [99, 2;// 输出 [1, 2;// 修改 mat2 不会影响 mat1。// 修改 mat2 会影响 mat1。
2025-04-05 10:04:56
843
原创 reactor网络模型
Reactor模型通过非阻塞I/O操作,允许单线程处理多个连接,减少线程切换开销,提升并发能力。:基于事件驱动机制,系统只在有事件发生时处理,避免忙等待,提高资源利用率。
2025-03-25 06:30:51
915
原创 QT标准对话框
Qt为应用程序设计提供了一些常用的标准对话框,如打开文件对话框、选择颜色对话框、信息提示和确认选择对话框、标准输入对话框等,用户无需自己设计这些常用的对话框,这样可以减少程序设计工作量。
2024-12-13 08:16:18
452
原创 创建型设计模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。——《设计模式》定义对象间的一种一对多(变化)的依赖关系,一边当一个对象(Subject)的状态发生变化时,所有依赖于它的对象都得到通知并自动更新。——《设计模式》GoF。
2024-12-09 10:40:21
540
原创 qt-xml文件操作
XML(eXtensible Markup Language)文件因其结构化和易于理解的特性,被广泛用于数据交换和存储。Qt框架提供了强大的支持来处理XML文件,主要包括DOM(Document Object Model)和SAX(Simple API for XML)两种解析方式,以及从Qt 4.3开始引入的基于流的QXmlStreamReader和QXmlStreamWriter类。本文将详细介绍如何使用Qt的DOM方法来进行XML文件的创建、读取、添加、删除和更新操作。2.ui界面2.
2024-11-06 17:44:57
722
原创 redis数据库学习一
redis数据在内存中,读取速度快,但易丢失,是key-value型数据库,类比于字典,通过key去操作value,mysql数据在磁盘中读取速度慢。key-value一一对应,请求回应模式,使用TCP与redis数据通信,对于发送的请求redis必须做出回应。
2024-09-27 09:28:57
1038
原创 红黑树rbtree
(1).根节点是黑色的(2).每个叶子节点是黑色的(3).如果一个节点是红色的,则它的两个儿子都是黑色的(4).对每个节点,从该节点到其子孙节点的所有路径上的包含相同数目的黑节点根节点为黑色,叶子节点也为黑色,红色节点的子节点为黑色,每条路径上黑节点高度一样一种强查找的数据结构2.用途:a.hashmapb.定时器c.cfsd.epoll当红黑树平衡结构被破坏时,需要进行旋转满足红黑树结构性质当插入或者删除节点旋转的次数为层高 ,插入时节点初始颜色为红色,因为这样不改变黑色节点高度。
2024-07-10 11:41:11
329
原创 无锁消息队列
分为put队列和get队列,put队列用于生产者、get队列用于消费者,当put队列和get队列为空时阻塞消费者线程,当get队列为空时,尝试与put队列进行交换,此时生产者和消费者发生碰撞,其他情况,生产者不与消费者发生碰撞(争夺锁)。(2).由于多线程情况下,当一个线程拿到锁以后,其它线程需要经过自旋等待、阻塞态、就绪态,时间浪费在保护队列时的锁争夺上面,而不是用在执行任务上。答:如果是从操作队列的角度出发,无所队列性能高,如果是从队列所属系统角度出发,不一定,还需要看任务耗时。队列,它将明显更快。
2024-06-25 14:31:46
1323
原创 原子操作CAS与锁实现二
操作同时具有获得语义和释放语义,即它前后的任何读写操作都不允许重排,并且其他线程在对同一个原子对象释放之前的所有内存写入都在当前线程可见,当前线程的所有内存写入都在对同一个 原子对象进行获取的其他线程可见;在多线程情况下,操作原子变量时,cpu为避免锁总线会去操作其他变量,但这是无序,可能不符合当前的代码逻辑,所以需要程序员自己规定内存序,定重排规则。,在写入某原子对象时, 当前线程的任何前面的读写操作都不允许重排到这个操作的后面去,并且当前线程的所有内存写入都在对。如果替换成功, 则返回原来的值。
2024-06-18 14:42:03
955
原创 网络IO复用select/poll/epoll
(4).struct pollfd结构体:包含三个成员,fd、events、revents,fd和events在poll函数签传入fds,revents为返回事件,可根据代码理解。等待就绪的fd,第一个参数为epfd;(3).参数:nfds:最大的fd号,客户端fd会从4开始,0为stdin, 1为stdout, 2为stderr, 3为listen;FD_SET(index, fd_set* a):将a中index位置1;FD_CLR(index, fd_set* a):将a中index位置0;
2024-06-17 09:58:22
341
原创 Inno setup 检测CorelDraw注册表
我找的是ConfigDir的位置,也可以找programsdir位置,但是X4版本的注册表中没有programsdir。X7、X8、2017、2018的Config是大写,2019及以上是小写config。[File]段安装的位置。
2024-06-13 14:15:37
299
原创 内存池实现二
1.实现不定长大块,可以分配更大的内存,结构如下:第一个位置max用于判断需要分配的内存大小,大于max使用大块,小于max使用小块;第二个位置指针指向小块的首地址;第三个位置指针指向大块首地址。2.大块结构如下,使用队列结构,左边指针指向下一个大块首地址,右边指向分配的内存。3.下图是对应结构的代码,小块中last为起始地址,end指向已使用内存位置,next指向未使用内存末位置。
2024-06-12 10:04:01
317
原创 内存池的实现
减少内存碎片,当一个进程长期运行在堆上不停的操作内存会产生内存碎片,导致出现内存分配失败。还有调用malloc/new,系统需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,调用free/delete,系统可能需要合并空闲内存块,这些会产生额外开销。对内存实现管理实际上就是堆管理(malloc),下图是虚拟机内存分布图,内存池的实现主要操作堆的向上增长。2.解决方法:使用内存管理组件,jemalloc和tcmalloc是完善的两个内存管理组件;4.内存池释放内存块。
2024-06-03 14:30:55
546
原创 线程池与性能分析
1.线程池的作用:线程的一种使用模式,线程过多会带来调度开销,进而影响缓存局部性和整体性。(1).创建任务队列:首先从堆上分配一个任务队列的内存,还是使用回滚式编程,分配成功就free,然后进行互斥锁和条件变量的初始化,互斥锁初始化成功就destroy,然后进行条件变量初始化。(2).销毁任务队列:首先释放队列任务分配的资源,销毁原子锁、条件变量、互斥锁,最后free队列。(2).销毁线程池:线程池退出,休眠线程先唤醒后退出,执行任务的线程完成当前任务退出。(1).创建线程池:传入参数为线程池数量。
2024-06-03 10:53:13
333
原创 dpdk学习记录二
1.解析收到的数据,将以太网头的mac地址、ip头的ip地址、udp头的端口信息保存到global。获取包长度用于ip包的封装和udp包的封装,从mbuf池中分配一个mbuf用于发送数据。解析接收的包,保存发送端和接收端的信息,以太网头、ip头、tcp和udp头。(3).udp发送和tcp发送,首先保存收到数据的协议头,将目的端口和源端口的协议头信息进行调换封装,使用rte_eth_tx_burst函数发送。封装以太网协议头,创建以太网协议头指针指向msg也就是mbuf首地址,添加目的mac和源mac;
2024-06-03 09:37:47
224
原创 dpdk学习记录一
(6).接下来执行43,44,45,46,47,49,46和47设置巨页时选择512,选择49时eth0如果还是活跃状态需要关掉ifconfig eth0 down,执行完毕后,环境配置完成。(1).编译方式,使用makefile文件编译,Makefile复制于cp ../dpdk-stable-19.08.2/examples/helloworld/Makefile ./为什么需要多队列网卡,因为dpdk需要多队列网卡,单网卡只有一个中断,多队列网卡有多个中断,dpdk可以同时处理多个中断,增加吞吐量。
2024-05-20 09:14:44
521
原创 Qt无法定位程序输入点XXXXXXX于动态链接库XXXXXXXX
使用Dependencies软件将debug生成的exe和打包生成的exe进行依赖库对比 ,查看出问题的dll库目录下子dll库是否不一样,选择正确的dll库。使用Qtcreater在debug模式下正常运行程序,打包好的程序运行出现这个错误。
2023-11-11 16:02:26
514
1
原创 qt+opencv提取图片最外层轮廓遇到的问题
在使用边缘检测时第一次使用的是canny检测导致最外层轮廓不完整,使得得到的最外层轮廓不是理想的结果,正确的应该是使用Laplacian进行边缘检测,得到的图形最外层轮廓是完整的。
2023-06-10 16:44:09
291
1
原创 vscode+python安装opencv问题
这样就可以了,之后pip list中出现opencv库。安装后pip list中没有opencv库。2、pip安装完整版opencv。
2023-06-08 09:28:46
818
1
原创 报错: can‘t open file ‘pyinstaller‘: [Errno 2] No such file or directory
can't open file 'pyinstaller': [Errno 2] No such file or directory
2023-03-14 15:49:37
1832
原创 \Makefile.Debug:4575: warning: overriding recipe for target ‘debug/qaesencryption.o‘
\Makefile.Debug:4575: warning: overriding recipe for target 'debug/qaesencryption.o'
2023-03-03 09:32:36
507
原创 ERROR: Could not install packages due to an OSError: [Errno 22] Invalid argument: ‘C:\\Users\\HSzhi\
ERROR: Could not install packages due to an OSError: [Errno 22] Invalid argument
2022-12-22 15:29:55
763
原创 安装了opencv,import cv2还是失败
使用的是vscode,失败原因,opencv安装位置在python3.7, vscode使用的python版本是3.9(位于inkscape的lib中),删除3.9的python。
2022-12-12 19:19:42
1403
原创 python编译报错:ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Users\leopard\AppData\Local\P
python编译报错:ImportError: cannot import name 'Literal' from 'typing' (D:\Users\leopard\AppData\Local\P
2022-09-06 10:15:03
5464
qt svg图形写入pdf失败
2022-11-25
python对传入参数进行类型转换后,参数丢失
2022-11-18
关于#qt#的问题:我有两个svg文件,一个是coreldraw生成的a文件,一个是qt生成的b文件,将b文件中xml内容放入a文件中后显示会缩小很多,两个文件分开显示没什么问题
2022-11-04
vs2015安装出现问题
2021-07-22
为什么我的按钮转为槽没有clicked的选项?
2021-06-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人