- 博客(141)
- 收藏
- 关注
原创 圆卡尺,建坐标系,拟合圆,高斯滤波,双边滤波
对采样的灰度值序列计算相邻点的灰度差,当差值超过 grayDiffThreshold 且符合 transition 定义的边缘类型(如暗→亮),且连续 minConsecutive 个点满足条件时,判定为有效边缘,记录该位置的坐标。有了x轴的方向向量(x,y)后,顺时针旋转x轴变负,即(-x,y),逆时针即(x,-y)有了x,y轴的方向后,就可以求我们要检测的点在新坐标系的坐标,即算该点在新坐标系上的投影。有了2个圆的圆心后,以2点连线为x轴,中点为原点,2点的方向向量为x轴的方向。
2025-11-19 14:26:49
991
原创 将OpenCV的Mat转换为Qt的QPixmap
简单来说:QImage 负责 “图像处理和数据转换”,QPixmap 负责 “UI 显示和渲染优化”。因此,不是不用QImage,而是最终需要QPixmap来完成界面显示的任务~cvMatToQPixmap 的最终目的是在 Qt 的 UI 控件(如QLabel)中显示图像。
2025-11-11 10:21:40
389
原创 static_cast<int>(x) 是什么?
C++ 的「显式类型转换」,作用是把 double 类型的变量,安全地转换成 int 类型(直接截断小数部分,保留整数)。例:x=2.3 → x0=2;
2025-11-08 08:54:07
72
原创 C++ opencv拟合直线
核心功能:根据输入的点集 points,计算出一条 “最优直线”,使得所有点到该直线的 “距离和” 最小,并将直线参数存入 line 中。cv::DIST_HUBER:Huber 距离(结合 L1 和 L2 的优点,平衡鲁棒性和精度)。作用:仅对部分距离度量(如 DIST_L1、DIST_HUBER)有效,用于调整距离计算的权重。函数会最小化所有点到直线的欧氏距离的平方和(即最小二乘法拟合),适用于点集无明显离群点的场景。对于 cv::DIST_L2(欧氏距离),此参数无效,固定填 0 即可。
2025-11-05 13:57:14
441
原创 static_cast是什么作用?
static_cast 是 C++ 提供的显式类型转换运算符,用于在编译时进行 “合理且安全的类型转换”,明确告诉编译器 “我要主动转换类型”,替代了 C 语言中 “(类型) 表达式” 的旧式转换,同时提供更严格的编译检查。C++ 中不同类型(如 int 和 float、void* 和 int*)之间的转换需要明确的规则,static_cast 的核心是在 ** 编译器认可的 “兼容类型”** 之间进行转换,避免隐式转换可能带来的歧义或错误。// void* → 具体类型指针(必须显式转换)
2025-11-05 13:54:39
284
原创 static_cast是什么作用?
static_cast 是 C++ 提供的显式类型转换运算符,用于在编译时进行 “合理且安全的类型转换”,明确告诉编译器 “我要主动转换类型”,替代了 C 语言中 “(类型) 表达式” 的旧式转换,同时提供更严格的编译检查。C++ 中不同类型(如 int 和 float、void* 和 int*)之间的转换需要明确的规则,static_cast 的核心是在 ** 编译器认可的 “兼容类型”** 之间进行转换,避免隐式转换可能带来的歧义或错误。// void* → 具体类型指针(必须显式转换)
2025-11-05 13:50:33
328
原创 C++ opencv简化轮廓
冗余点会增加后续处理(如拟合最小外接圆、计算面积、旋转矩形)的计算量,甚至可能因噪声点导致拟合结果偏差。简化后,轮廓点数量减少(可能从几千个降到几十个),既保留了核心形状特征,又提升了后续算法的效率和稳定性。例如,一个近似圆形的轮廓可能由几千个点组成,但实际上用几十个点就能大致表示其形状;
2025-11-05 13:36:00
409
原创 C++随机颜色
避免生成 “太暗的颜色”:如果范围是 0~255,可能会生成 0~50 的暗色系(比如接近黑色的颜色),绘制在图像上(尤其是背景较暗时)会看不清(比如外接圆和背景融在一起);保证颜色 “足够亮”:50~255 的范围能确保生成的颜色亮度足够,无论图像背景是亮是暗,都能清晰看到绘制的图形(比如外接圆)。rng 直接获取 50~255 的值,dist 负责把 rng 生成的 “原始随机数” 转换成 50~255 范围的数。
2025-11-05 12:04:42
391
1
原创 #include <cassert> 断言(Assertion)头文件
8U:8 表示像素每个通道的位数是 8 位,U 表示无符号整数(unsigned),因此像素值范围是 0~255(最常见的图像格式);assert 是 C++ 标准库提供的一个 调试宏(从 头文件引入),作用是 在程序运行时强制检查一个条件是否成立。C1:C 表示通道(Channel),1 表示单通道(灰度图)。CV:表示这是 OpenCV 的类型定义;
2025-11-01 15:34:47
220
原创 栈【从入门到实战】
看顶部盘子(Top):你可以看一眼最上面的盘子,但不会拿走它。这就是栈的特性:最后放进去的盘子(数据)会最先被拿走。push(value):将数据压入栈顶(放盘子)。top():查看栈顶数据(看一眼最上面的盘子)。放盘子(Push):你总是把新盘子放在最上面。pop():移除栈顶数据(拿走最上面的盘子)。拿盘子(Pop):你只能从最上面拿走盘子。遇到右括号时,检查栈顶是否为对应的左括号。遇到左括号((, {, [)时压栈。
2025-04-09 15:26:11
265
原创 反转链表【力扣】
结构体是什么?作用:结构体是一种自定义的数据类型,可以把多个变量打包成一个整体。类比:想象一个「快递包裹」,里面包含:物品内容(对应val,存储值)下一个包裹的地址(对应next,指向下一个节点)构造函数 ListNode(int x)作用:创建节点时,快速初始化节点值val和指针next。分解解释:ListNode(int x):构造函数,接收一个整数x作为参数。val(x):将参数x赋值给当前节点的val。
2025-04-08 15:36:10
463
原创 蓝桥杯2024B组
二分查找:通常用于在有序集合中快速查找到目标值。但当问题满足以下条件时,也可以使用二分查找来解决最优化问题:解的范围明确且有序:需要确定解的可能范围,且该范围具有单调性。例如,当某个候选值满足条件时,更大(或更小)的值也一定满足条件。存在高效的验证方法:能够快速判断某个候选值是否满足问题的条件。
2025-03-22 17:09:50
364
原创 1313:【例3.5】位数问题--细节递推
N 表示位数,o[i] 表示到第 i 位包含偶数个 3 的数字数量,j[i] 表示到第 i 位包含奇数个 3 的数字数量。当 i==N 的时候,由于首位不能为零(1,2,4……偶数个3时,只要下一位不再是3就仍然为偶数。(注意当N>1时,最高位不能为0)
2025-03-17 11:45:49
358
原创 1196:踩方格--递推优化(二维数组的拆解)
本质:通过将二维坐标隐含在方向选择中,避免了显式坐标跟踪,使一维优化成为可能。并非所有的二维动态规划问题都能直接改为一维数组优化,是否可行取决于。是不是所有的二维数组移动的题目,都能优化为一维的呢?状态分解:将移动方向(左、右、上)作为独立状态。(如l[i]依赖u[i-1]和l[i-1])。递推问题,我们都需要先从最简单的入手。:初始化(得先有才能推)转移规则:每个方向的状态。将二维数组优化为一维。
2025-03-17 11:11:36
252
原创 1314:【例3.6】过河卒(Noip2002)--DP>DFS【超时DFS】
中等规模数据(如n+m≤30):需结合记忆化搜索(Memoization)。本题数据范围(n,m≤20):必须使用DP或记忆化搜索。小规模数据(如n+m≤15):DFS可以接受。
2025-03-15 19:29:38
274
原创 1191:流感传染--BFS
在同一天对一个病原体进行处理时,如果直接更改数组,将直接影响到后续的遍历。,遍历完所有坐标后,在统一更改感染。那么我们可以定义一个数组用来。
2025-03-15 18:48:50
320
原创 【递推】1188:菲波那契数列(2)&【进阶】1189:Pell数列&【进进阶】1190:上台阶--优化斐波那契【不开long long JZZ】
n%m,所有我们可以在计算的过程中对其存储的值进行取模。由题可知最后需要输出的是对1000取模的结果,优化1:记忆化存储,可以避免重复计算。
2025-03-15 17:25:45
188
原创 1176:谁考了第k名&1180:分数线划定--sort()与结构体的配合(精准排序)
妙手:定义结构体-sort()自定义比较函数【使其根据学生成绩降序排列】,实现进准排序。
2025-03-15 10:27:00
269
原创 1140:验证子串--next.data()、KMP和find
KMP中需要注意的是:应该从下标1开始遍历,因为下标0前面无值,不能匹配next。next.data()是std::vector容器的一个成员函数,它的作用是。对于字符串的匹配常见的KMP算法【面试常考】固在循环外应初始next[0]=0;便于使用的find代码也在下面了。交不了了,明天再试试。
2025-03-14 18:43:56
346
原创 2050:【例5.20】字串包含--巧解循环移位【自我拼接】
假设原字符串是 “ABCD”,将其拼接两次得到 “ABCDABCD”。此时所有可能的循环移位结果都会作为子串出现在其中因此,只需要检查 s2 是否是拼接后的字符串的子串,就能判断是否存在某种移位使得 s2 包含在其中。如果没找到:返回 string::npos(一个特殊常量,表示“未找到”)例如,big_str 中 “CDA” 起始于位置 2(索引从0开始)。如果找到:返回子串第一次出现的起始位置(索引值)find():用于在一个字符串中。,实现所有可能的移位结果。
2025-03-14 16:07:11
281
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅