- 博客(339)
- 资源 (5)
- 收藏
- 关注
原创 【HALCON】HALCON算子详解:test_subset_region 的功能与应用
的主要功能是判断一个区域(Region1)是否完全包含在另一个区域(Region2)中。换句话说,它用于测试 Region1 是否是 Region2 的子集。是 HALCON 中用于判断区域包含关系的高效工具,特别适用于需要验证区域嵌套关系的图像处理任务。通过合理使用该算子,开发者可以简化区域关系的判断逻辑,提高图像处理的准确性和效率。
2025-05-21 01:00:00
269
原创 【HALCON】 算子详解:create_local_deformable_model_xld 的全方位解读
create_local_deformable_model_xld 是 HALCON 中用于创建局部可变形模型的关键算子,适用于处理图像中目标存在非刚性变化(如弯曲或拉伸)的情况。该算子通过 XLD 轮廓生成模型,广泛应用于工业检测、医学图像分析等领域。其核心参数包括 NumLevels(图像金字塔层级)、AngleStart(旋转角度范围)、ScaleR*(行列缩放范围)、MinContrast(边缘灵敏度控制)等。通过合理配置 MinContrast 和 GenParamName,可以优化模型的匹配精度
2025-05-18 10:32:13
416
原创 【yolo】如何在 YOLOv8 中添加负样本以减少误检
在YOLOv8目标检测中,误检(False Positive)是一个常见问题,即模型将非目标区域错误识别为目标。通过引入负样本(Negative Samples),即不包含任何目标框的图像,可以有效减少误检。在YOLOv8中添加负样本的方法是为这些图像提供空的标注文件(.txt),确保每张图像都有对应的标注文件,即使内容为空。可以使用Python脚本自动生成这些空标注文件。使用负样本时需注意数量比例、标注一致性、验证集同步和图像质量。适当加入负样本能显著提升模型鲁棒性,降低误判风险。
2025-05-15 15:30:03
426
原创 【HALCON】破案了:halcon脚本为啥测试时和运行时结果老是不一样?
在处理图像算法时,图像保存格式的选择可能对结果产生重大影响。本文通过一个字符检测项目的案例,揭示了JPEG格式的有损压缩如何导致模板匹配得分的变化。实验表明,使用JPEG保存的图像在重新加载后,匹配得分从4.9变为5.3,而使用无损的BMP格式则保持了原始得分。文章建议在进行模板训练或匹配分析时,应使用原始图像对象或无损保存格式,避免使用JPEG格式,以确保算法结果的准确性。这一案例强调了在图像处理中,即使是微小的细节也可能对最终结果产生重大影响。
2025-05-15 01:15:00
1476
原创 【HALCON】 HALCON 教程:正确使用 `get_dict_tuple` 获取字典内容
本文详细介绍了 HALCON 中 get_dict_tuple 算子的正确使用方法,并分析了常见的错误及其解决方案。get_dict_tuple 用于从字典中读取键对应的元组值,但使用不当可能导致错误,如 HALCON error #1302。常见错误包括键不存在、字典未初始化或值类型不匹配。为避免这些问题,建议在使用前检查键的存在性、字典的初始化状态以及值的类型。文章还提供了安全使用的代码示例,并推荐了相关文档和 API 索引。此外,作者提到在模板匹配中,直接使用 HImage 与保存后加载的图像在打分上
2025-05-14 20:35:17
785
原创 【C#基础】集合.Any() 与 判断集合的长度有啥区别?
集合.Any() 和 集合.Count > 0 在判断集合是否为空时功能相似,但存在显著差异。Any() 通常更高效,因为它找到第一个元素即返回,适用于所有 IEnumerable 类型,包括无限序列和流式数据,且语义更清晰。而 Count > 0 需要遍历整个集合计数,仅适用于可计数的集合(如 ICollection)。在数据库查询中,Any() 生成的 SQL 更优化。最佳实践建议优先使用 Any() 判断集合是否为空,仅在需要元素数量时使用 Count。
2025-05-14 15:16:42
329
原创 【Qt/C++】深入理解 Lambda 表达式与 `mutable` 关键字的使用
本文深入探讨了在 Qt/C++ 开发中 Lambda 表达式与 mutable 关键字的使用。通过示例代码,详细解释了 Lambda 表达式的基本结构、变量捕获方式以及 mutable 关键字的作用。文章指出,mutable 允许修改按值捕获的变量副本,而不会影响外部变量。此外,文章还分析了不同捕获方式的特点,并提供了最佳实践建议,如按值捕获适用于只读场景,引用捕获适用于需要修改外部变量的情况。最后,总结了不同捕获方式的区别,帮助开发者更好地理解和使用 Lambda 表达式,特别是在 Qt 信号槽连接中的应
2025-05-10 11:34:39
553
2
原创 【QT】Qt 信号与槽进阶技巧详解:默认参数、重载槽、Lambda、线程通信
本文深入探讨了Qt信号与槽机制中的进阶技巧,涵盖了槽函数默认参数的使用注意事项、重载槽函数的正确写法、Lambda表达式作为槽函数的优势,以及跨线程信号槽通信的实现方法。文章指出,槽函数默认参数在实际使用中容易引发误解,建议避免使用;重载槽函数时需通过static_cast明确指定函数签名;Lambda表达式作为槽函数简洁灵活,适合一次性处理逻辑;跨线程通信时,需使用moveToThread()和QueuedConnection确保线程安全。此外,文章还总结了信号槽连接方式及多线程对象释放的注意事项,为开发
2025-05-09 02:00:00
639
1
原创 【QT】Qt 自定义信号与槽详解:原理、写法、案例与进阶技巧
Qt 中的信号与槽(Signal & Slot)机制是实现对象间通信的核心方式,通过 QObject::connect() 将信号与槽连接,实现解耦的通信。自定义信号与槽需要继承 QObject 并使用 Q_OBJECT 宏,信号用 signals: 声明,槽用 slots: 声明。信号通过 emit 触发,不能直接调用。Qt5/6 推荐使用类型安全的连接语法,避免老式字符串写法。信号还可以与 Lambda 表达式结合,增强灵活性。跨线程通信时,Qt 会自动切换为 QueuedConnection,
2025-05-09 01:15:00
506
1
原创 【QT】深入理解 Qt 中的对象树:机制、用途与最佳实践
Qt 中的对象树机制是其内存管理和 UI 结构组织的核心特性。通过父子关系,Qt 自动维护一个树状结构,并在销毁父对象时递归销毁所有子对象,从而简化内存管理并避免内存泄漏。对象树在界面控件管理、信号与槽的自动断开、样式和事件传递等方面有广泛应用。开发中需注意避免设置错误的父对象、跨线程设置父子关系等常见误区。通过合理使用对象树,开发者可以更高效地管理复杂 UI 结构和内存资源。
2025-05-08 20:53:31
503
1
原创 【C++】C++函数指针详解与实用技巧
C++中的函数指针是一种指向函数入口地址的指针,常用于回调机制、策略模式等场景。其基本语法为 返回类型 (*指针变量名)(参数类型列表),通过函数指针可以动态调用函数。常见用途包括替代条件语句、作为函数参数(回调机制)、返回函数指针以及使用数组存储多个函数指针进行策略切换。现代C++中推荐使用 std::function 和 Lambda 表达式替代裸函数指针,因其更安全且功能更强大。在Qt中,connect 函数中使用 & 取地址操作符是为了代码清晰性和兼容性,尤其是在处理重载函数时。尽管在某些情
2025-05-08 20:44:25
675
原创 【Qt】Qt 构建系统详解:qmake 入门到项目实战
qmake是 Qt 提供的跨平台构建系统工具,它能将.pro文件(项目描述)转换为对应平台的构建脚本,如 Makefile 或 Visual Studio 工程文件。qmake是 Qt 提供的构建系统,简洁、易上手,是管理 Qt 项目的传统利器。熟练使用.pro文件可以大大提升项目维护效率。对于大型项目,建议使用subdirs管理模块。Qt 6 官方已推荐使用 CMake,新项目可考虑迁移。通常出现在项目的顶层,用于组织多个子项目。它本身不包含代码,只是构建配置的集合。
2025-05-07 20:10:42
1226
原创 【Halcon】极坐标转换算子 polar_trans_image_ext 使用详解
用于将图像中某个环形扇区区域转换为极坐标图像。Width可能并不是一个固定值,推荐你使用经验公式并结合视觉效果调试,来得到最适合你任务的设置。这张是在圆环上的原图拉伸12的效果拉伸50的效果拉伸100的效果当我写到200时,函数直接报错了!看来也无法无限往大了写。
2025-05-07 01:30:00
867
3
原创 【wpf】 WPF中实现动态加载图片浏览器(边滚动边加载)
初始只加载少量图片,快速打开界面。用户滚动时,按需分页加载后续图片。界面不卡顿,体验丝滑流畅。这种设计特别适合处理大量图片浏览、视频帧查看、缩略图管理器等场景。
2025-04-29 00:15:00
700
原创 【halcon】smallest_circle 最小外接圆操作解析
操作的目的是计算一个区域的最小外接圆,即包含该区域且面积最小的圆。它会输出圆的中心坐标(Row 和 Column)以及半径(Radius)。这个操作非常适合用于确定圆形物体的位置和大小,尤其是在物体内部不均匀或边缘不完整的情况下。例如,当我们需要处理一些硬币图像时,硬币可能因为拍摄角度、光照条件或分割算法的不完美而出现内部不均匀或边缘破损的情况。可以帮助我们准确地找到这些硬币的中心位置和大小,从而为进一步的分析和处理提供基础。
2025-04-28 14:50:56
449
原创 【halcon】tuple_sort_index 和 select_obj 配合使用 详解
计算需要排序的特征(如面积)。使用获取排序后的索引。使用select_obj和Indices+1重新排列对象。在 Halcon 的 Region 管理、特征筛选中,是不可或缺的重要函数。掌握,能够大幅提升你在复杂图像处理任务中,排序、筛选、优先级管理的灵活性和准确性。C# HTuple 操作是元素级别的,+1是批量的。Halcon Region 的 select 是从1开始的,必须 Indices + 1。排序后重新组合数据的能力,是做高质量图像分析程序的基础功!
2025-04-27 11:43:10
89
原创 【halcon】 紧凑度全面分析
在图像分析里,紧凑度是用来衡量一个区域形状紧凑程度的指标。紧凑度的计算公式如下:紧凑度的取值范围是 ( 0 < C <= 1 )。当区域形状越接近圆形时,紧凑度就越接近 1;而区域形状越细长、不规则或者有很多分支时,紧凑度就越趋近于 0。在判断一个区域是否为线状时,由于线状区域通常细长且不紧凑,其紧凑度值一般会比较小。在上述代码中,先使用算子计算区域的面积,再用perimeter算子计算区域的周长,最后依据公式算出紧凑度。
2025-04-16 15:37:42
873
原创 【C++】前向声明(Forward Declaration)
前向声明(Forward Declaration)是在C、C++等编程语言中,在使用一个类、结构体或其他类型之前,仅声明其名称而不给出完整定义的一种方式。
2025-04-14 20:26:38
295
原创 【Prism】弹窗复用的正确姿势:隐藏不销毁,实现二次显示
✅ 优点💬 描述✅ 性能提升避免多次创建/销毁同一窗口✅ 状态保留保留弹窗内用户输入、UI 状态✅ 复用灵活支持不同视图、多窗口共存✅ 易扩展可进一步封装动画、关闭判断等逻辑Prism 的在设计上是为“一次性对话框”而生的,但在实际业务中,弹窗的复用需求极为常见。通过延迟注册 + 窗口缓存,我们可以优雅地实现“隐藏而非关闭”的复用机制,提升用户体验同时也优化性能。
2025-04-09 11:31:43
84
1
原创 【Prism】Prism 中 EventTrigger 无法触发命令的问题及解决方案
在使用 Prism 时,如果绑定的命令无法触发,可能是ViewModel没有正确绑定到View。如果ViewModel未实现通常不需要手动添加。如果ViewModel实现了,建议手动启用,以确保ViewModel能够正确绑定。这个小细节在开发中容易被忽略,但却可能导致功能无法正常运行。因此,在使用 Prism 进行 MVVM 开发时,建议始终检查ViewModel绑定情况,以避免类似的问题。希望这个经验能帮到大家!
2025-04-02 15:43:28
61
原创 【C#】`Task.Factory.StartNew` 和 `Task.Run` 区别
✅日常写 async 或后台处理?用Task.Run,安全简洁。🔧有特殊需求(如长时间任务、不走线程池、UI 调度器)?用。// ⚠️ 容易犯错:});// 返回 Task<Task>,容易误用!});
2025-03-28 19:55:06
579
原创 【C#】Task 线程停止
就像一个“遥控开关”,可以让后台线程知道“该停下来了”。bool适合非常简单的控制,一两个线程内部用可以;但如果你要和 Task、多个线程、现代异步配合,才是真正线程安全、优雅且可组合的现代解决方案。
2025-03-28 19:38:42
708
原创 【C#】`Interlocked` vs `lock`
如果你只是修改一个变量,优先用,性能更高;如果你要操作多个变量或执行复杂逻辑,就用lock,更通用更灵活。你这个相机采集系统如果涉及采图计数、图像编号、控制状态这些,可以大量使用;如果是控制图像队列、处理流程,就可能需要lock。是一个线程安全的整数和引用操作工具类,不仅能递增递减,还能实现原子加法、值替换、CAS 等,高性能、无锁,非常适合并发场景!如果你在做一些并发计数器、控制标志位、实现轻量锁,是利器!
2025-03-28 16:57:17
446
原创 【C#】关键字 volatile
volatile让你在线程之间正确地观察到变量的变化,适合用于控制标志位(如循环退出),但不适合用于计数器、队列等需要原子操作的场景。
2025-03-28 16:50:01
494
原创 【yolo】初学 YOLO,你需要知道的三种配置
定义类别数量nc: 3 # 必须和 data.yaml 中一致# 深度和宽度缩放因子(small 模型)# Anchor 框设置(每个输出层3组)anchors:# 主干网络结构backbone:# 检测头部head:配置类型文件/代码路径内容数据配置data.yaml定义训练、验证、测试数据路径和类别信息模型配置yolo.yaml定义模型结构、通道数、anchor、Detect 层等训练方式yolo 命令用代码方式灵活启动训练,更易集成和调试。
2025-03-22 10:25:50
558
原创 【yolo】使用 Netron 可视化深度学习模型:从 YOLOv1 到 YOLOv8 的探索
Netron 是一个用于可视化神经网络模型结构的工具,支持多种深度学习框架的模型文件格式。模型可视化:支持 ONNX、TensorFlow、PyTorch、Keras 等格式,能够以图形化的方式展示模型的网络结构。参数查看:可以查看每一层的输入输出维度、权重参数等详细信息。跨框架支持:方便在不同框架之间进行模型转换和迁移。轻量化与易用性:提供网页版和桌面版,无需复杂配置即可使用。官网地址当我将一个onnx模型拖到网页时,你将得到一幅图。我主要看这个输出,你知道为啥是:198400吗?
2025-03-21 21:44:20
1069
1
原创 【yolo】YOLO训练参数输入之模型输入尺寸
是YOLO训练和推理过程中非常重要的参数之一。YOLO要求输入图像的尺寸是固定的,通常为正方形(如416×416、640×640等)。这个尺寸直接影响模型的性能和速度。
2025-03-21 21:01:26
3742
原创 【yolo】yolo训练报错,以及解决方案
刚刚,写了《【yolo】yolo推理报错,以及解决方案》,马上训练就遇到类似的报错。我对我标注的图像进行了300轮的训练,但是训练完300轮后,报错了。。。
2025-03-21 15:17:39
1289
原创 我的创作纪念日
五年前,我开始在博客上记录我的技术探索之旅。从最初的尝试到现在,这已经成为了我生活和工作的一部分。今天,借此机会总结一下这五年来的点滴收获。
2025-03-17 09:25:01
383
原创 【工控】线扫相机小结 第五篇
线扫相机通过光栅尺的脉冲触发, 我在调试线扫过程中,发现图像被拉伸,预设调节分配器。图像正常后,我提高的相机的扫描速度(Y轴动的更快了)。动的更快的发现,图像变短了(以前设置的高度为1000,现在高度明显变短了,但是出图了),而且又畸形了。此时不管怎么调节速度,都无法改变畸形。
2025-03-10 11:43:21
438
1
原创 【halcon】如何理解 halcon 中的domain 之 “区域被裁剪掉了!”
单词 domain 翻译为:n.: 域, 域名, 领域, 领地, 版图, 领土, 地盘, 王国。我最后的做法是,显示的时候关掉,显示完了就打开!
2025-03-08 14:34:34
165
原创 【WPF】绑定报错:双向绑定需要 Path 或 XPath
`CameraList` 里的每个元素就是 `string`,直接使用 `{Binding .}` 让 `TextBox` 绑定当前项
2025-03-01 15:23:44
469
原创 【C# 数据结构】队列 FIFO
队列和FIFO是什么关系?队列是一种数据结构。FIFO是队列需要遵循的基本原则:First-In, First-Out。或者说FIFO是队列的基本特性!C#中有个类叫做Queue,就是实现了队列这种数据结构的类,它遵循FIFO这个原则。
2025-02-21 10:51:57
992
1
原创 【工作流】WorkflowCore 第四篇 While节点
说实在的,WorkflowCore 自带的这个While节点并不好用,既然已经理解了While节点的逻辑,为什么不写一个符合自己需求的While节点呢?#region 输入/// true: 条件进行循环,false:根据次数循环set;} = false;set;//While循环次数set;} = 1;这样就得到了一个既可以选择设置条件,又可以选择设置循环次数的while节点了!!!
2024-12-31 09:57:21
1032
1
原创 【工作流】WorkflowCore 第三篇 不构造输入节点
在这篇文章中,我们详细的接解释了输入输出的节点的构造过程,这次我遇到了一个新的问题。
2024-12-21 14:07:53
395
1
原创 【Syncfusion系列】Diagram 杂谈 第四篇 节点拖拽
Diagram 的拖拽也可以通过这种方式实现。不过在过程中我发现一个问题:由于 Diagram 是支持 缩放的, 而且是有滚动条的。因滚动条和缩放导致视口变换,导致的拖放不准的问题! 也就是和鼠标释放的位置不一致。
2024-12-20 11:46:37
583
1
孙鑫C++教程(全20讲)PPT讲义 + code
2024-04-18
wpf .net prism 框架 项目模板
2023-12-08
tesseract-ocr-setup-4.00.00dev + tessdata + jTessBoxEditorFX-2.2
2022-04-25
TimeQuest笔记
2013-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人