
C++学习
文章平均质量分 76
痛&快乐着
从入门到放弃
展开
-
C++实时统计数据均值、方差和标准差
采用Welford 算法:避免传统方法(如先计算总和再求均值)的浮点数精度损失,保证了数值稳定性。处理边界条件:当数据量(n < 2)时,方差返回0.0。本文算法的优势:内存效率高,仅需要维护3个成员变量,适合实时或大数据场景。对比传统算法:避免存储全部数据,计算复杂度O(1)。原创 2025-04-28 21:37:30 · 683 阅读 · 0 评论 -
C++(OpenCV)实现MATLAB的edge(I, “sobel“)边缘检测
函数的C++代码,我们需要复现其完整的边缘检测流程,包括梯度计算、非极大值抑制和阈值处理。此代码实现了类似MATLAB的Sobel边缘检测流程,结合非极大值抑制和自动阈值处理,能够有效提取图像边缘。为了实现类似于MATLAB的。原创 2025-04-17 20:54:46 · 468 阅读 · 0 评论 -
C++动态链接库的创建及使用
运行时加载:程序运行时动态加载,节省内存。独立更新:更新库无需重新编译主程序。可重用性:由于多个应用程序可以共享一个DLL,因此它们可以共享相同的代码和数据,从而提高了代码的可重用性。节省内存:由于DLL在运行时才加载到内存中,因此它们可以在不占用过多内存的情况下提供所需的功能。稳定性:由于多个应用程序共享相同的DLL,因此如果DLL中的代码或数据发生问题,则可以在一次更新后修复所有使用该DLL的应用程序。原创 2025-04-17 08:00:00 · 1222 阅读 · 0 评论 -
C#调用C++动态库时出现`System.DllNotFoundException`错误的解决思路
确认DLL位置:将DLL放在C#输出目录。检查依赖项:确保所有依赖的DLL存在。缺少目标XXXdll的依赖,例如要用到的是A.dll,A.dll用到时需要添加B.dll动态库文件,在用到时需要两个dll同时存在。其中,B.dll导出有问题时通过dumpbin检查A.dll不能检查出来,需要进一步检查B.dll。匹配平台:统一x86或x64。验证导出函数:使用dumpbin检查名称。安装VC++运行时:确保目标机器已安装。通过逐步排查上述问题,通常可以解决。原创 2025-04-07 21:02:43 · 1239 阅读 · 0 评论 -
C++设计模式学习
设计模式是一种经验总结,它描述了在特定环境中经常出现的问题,并提供了问题解决方案的模板。设计模式就像是一套编程阵法,让你在编程世界中更加游刃有余,掌握了这些阵法,你的代码将更加健壮,逻辑清晰,方便维护。通过学习设计模式,你可以实现代码组件间的高度解耦和协同,让你的应用变得更加稳定和可扩展。使用工厂模式,你可以将对象的创建过程与具体类解耦,让代码更加灵活;使用策略模式,你可以根据不同情境灵活切换算法;使用单例模式,确保一个类只有一个实例,并提供全局访问点;原创 2024-12-16 16:51:52 · 1302 阅读 · 0 评论 -
UML类图学习
UML类图是UML中最常用的图之一,主要用于描述系统中的类、接口、协作和它们之间的关系,如继承、聚合、组合、依赖和实现。它以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法。类图用来描述系统中有意义的概念,包括具体的概念、抽象的概念、实现方面的概念等,是对现实世界中事物的抽象。类图不仅帮助我们理解系统的静态结构,还能够辅助设计阶段的工作。它们提供了对系统组件的高层次视图,有助于识别系统的关键概念,并促进团队成员之间的交流。原创 2024-12-12 22:43:39 · 1244 阅读 · 0 评论 -
(C++)堆已损坏CRT detected that the application wrote to memory after end of heap buffer
在使用内存之前,务必一定要确定内存已经分配了,且不要越界,否则会出现此类错误。另外,在调试程序时,最好先在debug模式下跑通,然后再在release下运行,这样也容易排查一些潜在的错误。这篇文章应该就是一个越界使用的例子,本质上也是使用了自己未分配的内存。原创 2024-12-10 07:30:00 · 526 阅读 · 0 评论 -
【python, C++, CUDA】双线性插值(Bilinear Interpolation)实现
双线性插值是一种更为平滑的图像缩放算法,它考虑了目标像素周围四个源像素的影响,并根据距离进行加权。其主要经过三次线性插值得到,如下为线性插值的公式,可以将插值点的值解释为两个点的距离加权,其中距离近的点权重大,距离远的点权重小。已知Q11(x1,y1)、Q12(x1,y2)、Q21(x2,y1)、Q22(x2,y2),求其中点P(x,y)的值。不难发现,其中每个点的权重和对角点到点P的距离是相关的(水平距离x垂直距离)。当然,也可以简化为如下的加权公式,可以看到该点由四个点加权求和得到。原创 2024-11-28 23:59:57 · 1312 阅读 · 0 评论 -
C++高精度计时方法总结(测试函数运行时间)
此处需要注意的是,这个函数所求的的运行时间并非准确运行时间,不过相对来说比较准确,它的精度和CPU有关,一般精度在16ms左右,由于GetTickCount()返回值以32位的双字类型DWORD存储,所以它的存储最大值是(2^32-1) ms约为49.71天,一旦一个程序运行时间超过这个值,这个数字就会归为0。3、clock() 函数,返回从 开启这个程序进程 到 程序中调用clock()函数 时之间的CPU时钟计时单元(clock tick)数(挂钟时间),返回单位是毫秒。原创 2024-09-22 18:04:56 · 4451 阅读 · 0 评论 -
C++ 获取文件夹下的全部文件及指定文件(代码)
原因: _findnext()第一个参数”路径句柄”,返回的类型为intptr_t(long long),如果定义为long,在win7中是没有问题,但是在win10中就要改为long long或者intptr_t。vs2017版本可以使用C++17,但也需要设置下项目属性:右击项目 -> 属性 -> 配置属性 -> C/C++ -> 常规 -> 语言 -> 编译器语言,然后将编译器语言改为C++17。对于每个文件,我们输出其文件名。如果使用的是更早的C++标准,可能需要使用其他库或方法来实现相同的功能。原创 2024-09-13 22:26:29 · 5065 阅读 · 0 评论 -
OpenCV通过鼠标提前ROI(C++实现)
opencv实现鼠标框选ROI原创 2024-09-11 22:44:09 · 778 阅读 · 0 评论 -
OpenCV仿射变换和透视变换函数(C++)
透视变换:按照物体的成像投影规律将图像重新投影。常见用例是修正镜头与拍摄目标存在斜角时产生的图像畸变。如果知道目标变换前后的三个像素点坐标之间的关系,即可求出仿射变换矩阵M。旋转变换是仿射变换的一个特殊情况,将此矩阵用于仿射变换函数即可仅作图像旋转。使用getPerspectiveTransform()函数获取变换矩阵。使用warpPerspective()函数应用透视变换。图像的几何变换通常包括拉伸、缩放、扭曲和旋转等操作。注:仿射变换的矩阵M是2×3的矩阵。注:透视变换的矩阵M是3×3的矩阵。原创 2024-09-09 22:20:10 · 1336 阅读 · 0 评论 -
非局部均值降噪算法(NLM)原理及实现
在日常生活中,最常见的 CT 图像噪声是高斯白噪声。目前,针对高斯白噪声的处理方法,主要有空间域中的以平滑为基本思想的均值滤波、高斯滤波、局部滤波等,此外还有频率域中的维纳滤波和小波阈值收缩等。局部强度统计特征是衡量区域内像素间的平均相似性,但这一特征难以准确辨别边缘与其邻近点之间的差异,导致了滤波结果中边缘信息的模糊。小波阈值收缩算法虽能够很好地估计信号的噪声,但是阈值和阈值函数的选择上存在不确定性,会造成信号的失真。原创 2024-08-27 22:16:38 · 2891 阅读 · 2 评论 -
C++使用jsoncpp读取Json文件
1)、json文件JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。2)、json与其他存储数据方式比较(或者说为什么要用json文件呢?原创 2024-06-06 22:05:14 · 1664 阅读 · 0 评论 -
C++指针的使用及注意事项
我们常说的指针是一个变量,为复合类型(包括数组、字符串、结构等),指针变量实质是指存储了一个内存地址。而变量会有自己的内存空间,所以虽然指针变量代表着另外一个内存地址,但其自身也会有对应的内存空间存储值,从而导致双重指针或多重指针的存在(多级间接寻址)。在计算机中每个变量都有自己的内存位置,并定义了使用地址运算符(&)可以取用的内存地址。即如果var是一个变量,则&var代表它的地址。总之,指针和内存管理是C++编程中非常重要的一部分,需要程序员对其有深入的理解和掌握。原创 2024-02-21 18:33:41 · 1288 阅读 · 0 评论 -
C++/C函数指针及函数指针数组(指向成员函数的指针)
首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址。其中,ret为返回值,*p作为一个整体,代表的是指向该函数的指针,args为形参列表。其中p被称为函数指针变量。关于函数指针的初始化与数组类似,在数组中,数组名即代表着该数组的首地址,函数也是一样,函数名即是该数组的入口地址,因此,函数名就是该函数的函数指针。函数指针变量 = 函数名;//例子return a+b;原创 2024-02-21 11:06:46 · 2269 阅读 · 0 评论 -
C++/Python/MATLAB检查内存使用情况
有时为了对电脑、服务器做运行情况监控,需要获取内存、cpu的使用情况。当处理CT图像数据的时候,由于需要内存较大,因此容易出现内存不足的问题,对此,在处理数据之前预先检查剩余内存是否充足很有必要。以下分别是三种编程语言下的内存检查代码。原创 2024-02-18 14:45:09 · 653 阅读 · 0 评论 -
C++给应用程序添加图标
给应用程序添加图标原创 2024-02-01 18:39:01 · 1356 阅读 · 0 评论 -
C++实现图像金字塔下采样和上采样
这不难理解,进行upsample后,图像像素值为0的像素在滤波后其值要和原图一样,该像素的四邻域权重之和应该在0.9左右,其余0.1的部分由其它像素贡献。图像金字塔是对图像的一种多尺度表达,将各个尺度的图像按照分辨率从小到大,依次从上到下排列,就会形成类似金字塔的结构,因此称为图像金字塔。最近在写图像上采样和下采样的C++算法,下采样实现比较容易实现,使用大小5x5和方差为1的高斯滤波核即可得到想要的效果。(2)图像金字塔的下采样之前会对图像进行模糊,上采样后也会进行模糊;原创 2024-01-31 17:03:51 · 1402 阅读 · 0 评论 -
C++实现快速高斯滤波
二维方式是根据kernel的大小以及sigma大小生成一个 size*size的卷积核,然后再做卷积。计算量是imgWidth * imgHeight * size * size,但如果用两个一维来替代,则计算量是imgWidth * imgHeight * size * 2,计算量大大减少。看这篇文章的道友想必对高斯滤波已经很熟悉,在此就不进行赘述了,也可以看看参考资料的文章回顾一下。此处的数据类型ImagePro可以根据自己的需求进行定义。原创 2023-11-28 17:51:55 · 722 阅读 · 0 评论 -
C++指针用作函数形参的问题
C++指针用作形参原创 2023-10-27 09:47:30 · 101 阅读 · 0 评论 -
C++学习网站收藏
C++学习网站原创 2023-10-25 11:41:36 · 738 阅读 · 0 评论 -
C++编程命名规范
命名规范原创 2023-10-09 17:08:42 · 1419 阅读 · 0 评论 -
C++动态链接库DLL制作
dll文件制作原创 2023-09-21 13:40:47 · 454 阅读 · 0 评论 -
直方图均衡化以及直方图匹配
图像处理之直方图均衡化、直方图匹配原创 2023-08-30 22:08:11 · 1842 阅读 · 0 评论 -
C++代码之VS优化以及omp并行加速
vs代码优化以及omp加速原创 2023-08-24 22:04:53 · 2625 阅读 · 0 评论 -
OpenCV绘制直方图实现
opencv实现直方图绘制原创 2023-07-29 17:47:10 · 420 阅读 · 0 评论 -
OpenCV绘制透明Mask
绘制透明mask原创 2023-05-31 18:53:46 · 789 阅读 · 0 评论 -
fread和内存映射读取二进制文件
内存映射和fread读取文件原创 2023-04-11 09:37:18 · 1197 阅读 · 0 评论 -
C++基类接口设计之虚析构函数
虚析构函数原创 2023-03-28 18:17:43 · 376 阅读 · 0 评论 -
OpenCV实现图像中相邻区域的连接并进行合并
连接相邻区域原创 2023-03-24 12:00:59 · 5579 阅读 · 4 评论 -
【C++问题集锦——持续更新中】
C++问题集锦原创 2022-11-19 18:03:14 · 870 阅读 · 0 评论 -
C++字符串操作(string类)
C++字符串原创 2022-06-07 00:12:01 · 1569 阅读 · 0 评论 -
二进制文件读写那些事儿(C++实现)
二进制文件存储的优点原创 2022-05-25 10:57:02 · 7899 阅读 · 0 评论 -
C++项目配置
C++项目在配置时主要包括头文件包含目录(include)的配置和库文件目录(lib)的配置,主要有两种方式:一种是在VC++目录中配置,另一种在C/C++目录和链接器中配置。一般情况下我们采用后者的配置方式,有关VC++目录和C++目录配置的区别见:https://www.cnblogs.com/JMLiu/p/7954630.htmlC/C++和链接器配置方式:(1)属性管理器配置(用于所有项目) 在进行配置时,可以通过项目的属性管理器进行配置,这种方式可以解决之后所有项目的相同配置,对原创 2022-05-08 17:57:09 · 1068 阅读 · 0 评论 -
Visual Studio2015编译C++时intellisense错误,无法打开头文件
问题描述:开始时项目编译是没有问题,之后重新打开后编译出现intellisense错误,无法打开一系列头文件的提示解决方案:通过搜索网上的一些解决方案,在项目项目的附加包含目录中添加路径 “$(ProjectDir)”后问题解决了。但在编译一次后将该路径去掉后仍然可以正常编译,因此猜测可能是VS出现问题不能识别项目路径。拓展案例:同时对一个项目的另一个版本在编译出现“无法打开Qt的包括文件Qrwidgets”的情况,对此,尝试添加项目路径解决了该问题。对此,在保证环境变量原创 2022-05-07 10:58:52 · 1517 阅读 · 0 评论