- 博客(30)
- 收藏
- 关注
原创 c# 异步编程详细说明及实践
异步方法通常返回Task(无返回值)、Task(有返回值)或void(仅用于事件处理程序)当await的任务完成后,方法会从暂停处恢复执行。这类任务涉及输入/输出操作,如网络请求、文件读写或数据库访问。它们不需要专用线程,在等待硬件响应时自然释放线程资源。这类任务需要进行大量计算,如图像处理、复杂算法等。它们需要专用线程执行计算Task API提供了高效处理多个异步操作的方法:Task.WhenAll:等待所有任务完成Task.WhenAny:等待任一任务完成exMessage。
2025-11-13 15:55:03
496
原创 c# 上位机作为控制端与下位机通信方式
下面这个表格详细对比了几种主流通信方式初始化配置:使用 System.IO.Ports.SerialPort类。关键是要确保参数与下位机完全一致描述:串口通信是上位机与下位机(如单片机、PLC)常用的通信方式,RS232 适合点对点,RS485 支持多点通信特点:1.简单、稳定,适合短距离通信2.需要配置波特率、数据位、校验位等且保持与下位机一致应用场景:工业设备控制、传感器数据采集实例化并配置串口参数:打开连接:发送数据:接收数据:通过 DataReceived事件处理。务必注意数据包完整性
2025-11-13 15:29:09
872
原创 c# 钩子技术(Hook)
下面我们以实现一个最常见的低级键盘钩子(WH_KEYBOARD_LL)为例,它属于全局钩子,但其回调函数可以放在主程序内,无需单独DLL。:除非你明确想要拦截某个消息,否则必须在回调函数末尾调用CallNextHookEx,以确保消息能继续传递给其他钩子或最终的目标窗口。务必保持此函数代码简洁高效,避免进行复杂的、耗时的操作(如数据库查询、网络请求),否则会严重拖慢系统响应速度。:钩子会消耗系统资源。此外,一些安全软件(如杀毒软件)可能会警告或阻止使用键盘钩子的程序,因此要确保你的程序意图明确可信。
2025-11-08 15:07:18
666
原创 C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown/KeyUp事件之间的区别
组合键的判断通常在 KeyDown或 KeyUp事件中进行,通过判断修饰键属性(e.Control,e.Shift,e.Alt)和另一个键的 KeyCode来实现。需要注意的是,Print Screen(PrScrn)键无法通过标准的 KeyDown、KeyPress、KeyUp事件捕获。这是一个强大的开源库,它封装了底层API,让你能更轻松地实现模拟键盘输入和全局捕获,非常适合自动化测试、游戏脚本等场景。对于复杂的系统级组合键,有时在 KeyUp事件中判断会更准确,因为它能确保所有键都已完全按下。
2025-11-08 14:43:50
892
原创 halcon分类器使用标准流程
训练完成后,可以使用 write_class_mlp保存模型,之后通过 read_class_mlp读取,避免每次重新训练。预处理的重要性:对特征向量进行预处理(如归一化)可以加速训练并提升精度 ,在图像处理阶段,有效的分割算法是成功提取特征的前提。下面是一个详细的代码示例,我们将使用一个简单的例子:对三种不同的金属零件(螺母、垫圈、挡圈)进行分类。分类速度快,训练速度慢,适用于对内存要求低,需要快速分类,支持离线训练的场景。训练极快,分类速度慢,内存需求高,适用于缺陷检测,多维度特征分类。
2025-11-03 14:47:33
755
原创 halcon卡尺找圆标准流程
使用 create_metrology_model算子创建一个空的计量模型句柄。这个模型将作为所有后续操作的容器。这是核心步骤,使用 add_metrology_object_circle_measure算子向模型中添加一个圆的测量任务。此步骤需要提供圆的初始估计位置(圆心Row, Column和半径Radius)以及关键的测量参数:MeasureLength1: 每个测量卡尺一半的高度。它决定了在法线(半径)方向上搜索边缘的范围。值越大,容忍的圆心定位误差越大,但计算量也增加。
2025-10-22 17:58:53
779
原创 C# ONNX模型推理结果异常原因分析
• 尺寸与填充:是否严格按照模型要求的输入尺寸(如640x640)进行等比例缩放和填充(LetterBox),填充色建议使用中性灰(114, 114, 114)可视化中间结果:将预处理后的图像(input_img)保存下来查看,确保图像没有扭曲、变色,且填充正确(Cv2.ImWrite)• NMS阈值(nms_threshold):设置过高会保留过多重叠框,过低则可能误删正确检测。• 置信度阈值(conf_threshold):设置过高会导致漏检,过低则增加假阳性。这是最常见的问题源。
2025-10-22 13:38:20
354
原创 解决labelimg打框报错 TypeError: setValue(self, int): argument 1 has unexpected type ‘float‘
labelimg打框时闪退并报错:TypeError: setValue(self, int): argument 1 has unexpected type ‘float‘文件地址: C:\Users\XXX\anaconda3\Lib\site-packages\libs\canvas.py。更改后保存文件,重新打开labelImg,可以正常打开和打框标注了。但是图片大小无法拖动 ಠ_ಠ。将canvas.py文件 526、530、531行的float改为int。更改canvas.py文件。
2025-08-08 14:04:48
393
原创 ROS通讯 Topic 话题发布与订阅
在 ~/catkin_ws/src/topic_example/src 目录下创建一个名为 listener.py 的文件。本文的发布订阅方式用的都是python文件,如果想用c++的方式也可以,ros库支持python和c++,这里就不作展示了。在 ~/catkin_ws/src/topic_example/src 目录下创建一个名为 talker.py 的文件。catkin_make 用于编译工作空间(ros的编译代码常用)创建了一个名为 topic_example 的功能包,它依赖于。
2025-07-30 17:25:46
447
原创 ubuntu 安装 rosbridge 失败解决办法
rosbridge_library - 核心rosbridge包。rosbridge_library负责获取JSON字符串并将命令发送到ROS,反之亦然。rosbridge_server - 虽然rosbridge_library提供了JSON ROS转换,但它将传输层留给其他人。rosbridge_suite包是一个包集合,用于实现rosbridge协议和提供WebSocket传输层。Roslibjs是一个浏览器的JavaScript库,可以通过rosbridge_server与ROS交谈。
2025-07-30 10:52:05
552
原创 ROS2 windows系统安装教程
关于ROS和ROS2的介绍就到这里,相信能看到这篇博客的读者都了解过了。这里直接上pixi官方安装教程。
2025-07-21 14:44:14
1782
1
原创 halcon 开闭运算例程分析
Method:分割方法(‘max_separability’:最大限度的可分性, ‘smooth_histo’:直方图平滑)至此我们就获得了毛刺的区域图,后续可通过area_center 算子获得毛刺区域的面积和区域中心点等特征用作后续分析。后续在一个for循环中操作,针对每一张图片,后续例图以第一张为参考。4.对轮廓图和闭运算处理图做差异处理,获取被去除掉的包涵毛刺的区域。5.通过开运算,去除除毛刺外的其他非连接小点杂质。3.对轮廓图进行闭运算处理,去除毛刺。Image:需要进行阈值的图像。
2025-07-16 18:03:25
437
原创 halcon 开运算闭运算应用
高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。图像高斯平滑也是邻域平均的思想对图像进行平滑的一种方法,在图像高斯平滑中,对图像进行平均时,不同位置的像素被赋予了不同的权重。背景太复杂了,周围的划痕区域是正常区域,如何能把中间的小块黑色区域提取出来,试了频域滤波,几种阈值分割方法,效果都一般,都会把周围划痕一起提出来。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。
2025-07-09 15:45:29
1081
原创 Halcon差异模型缺陷检测
差异模型缺陷检测主要用来检测物品损坏,凸起,破洞,缺失,以及质量检测等,在字符印刷或背景脏污等场景也同样可以应用halcon官方例程里的 print_check.hdev 用到了差异模型,将一个或多个图像同一个理想图像做对比,去找到明显的不同。进而鉴定出有缺陷的物体,本文思路以该例程为准。
2025-07-08 14:56:39
1323
原创 halcon GMM分类器方法与使用
以下演示使用GMM分类器分类,图片用的halcon自带的图片,路径:C:/Users/Public/Documents/MVTec/HALCON-12.0/examples/images/rings。若希望在训练结束后保存训练模型,然后每次使用时通过读取训练模型来实现分类的话,则需要添加模型的保存(write_class_…机器学习在Helcon中的一个重要应用就是用于图像分类任务,Halcon中常用的分类器有GMM(高斯混合模型)、MLP(多层感知机)、SVM(支持向量机)等。
2025-06-27 15:48:47
438
原创 halcon 颜色识别提取
简单地说HSV可以用更加直观的数据描述我们需要的颜色,H代表色彩,S代表深浅,V代表明暗,通过阈值的划分,颜色即可被区分出来。):表示颜色类型,以角度度量,范围通常为 0°~360°(如OpenCV中缩放到 0~179),红色对应0°(或180°),绿色120°,蓝色240°,补色间隔180°。):表示颜色纯度,范围 0%~100%(或 0~255),值越高颜色越鲜艳,0%时为灰度。)表示颜色亮度,范围 0%~100%(或 0~255),0%为纯黑,100%为最亮颜色。
2025-06-25 10:03:38
809
原创 halcon 形状模板匹配
draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2) 算子可以手动在窗口绘制一个ROI区域,通过这个方式选取到需要的ROI参数并保存,然后再生成该区域,截取该区域作为模板。create_shape_model算子窗口,供参考。find_shape_model算子窗口,供参考。2.第二步,使用获取到的ROI区域创建形状模板。笔者能力有限,如有误解多多包涵。
2025-06-24 11:12:10
559
原创 C#使用opencv通过rtsp读取相机流并显示在hWindowControl控件上
【代码】C#使用opencv通过rtsp读取相机流并显示在hWindowControl控件上。
2025-06-19 17:49:20
341
原创 halcon卡尺测量工具找圆实现方案
如图,上图为执行后的部分轮廓显示,外圈为卡尺工具ROI区域生效范围,可以写死也可以手动画一个,内圈为执行结束后找到的圆轮廓。本文示例在halcon中使用卡尺测量工具找圆的实现。
2025-06-19 17:10:00
302
原创 .NET(dotNET)安装,出现“No SDKs were found”找不到SDK问题的解决办法
系统里同时安装了x86和x64的dotnet sdk,分别在C:\Program Files (x86)\dotnet以及C:\Program Files\dotnet目录下。通过修改环境变量,找到路径“环境变量–>system–>> path”,将x86删掉(环境变量在安装时都是默认配置好的,也会造成混淆).NET 6安装后,在命令行用 dotnet --info命令或者用命令 dotnet --list-sdks 结果为空。使用dotnet命令时,默认是x86的目录,导致找不到sdks的问题。
2025-06-18 18:14:52
970
原创 c# 联合halcon将图片保存至流水文件夹中
这里的 hWindowControl2.HalconWindow 是halcon的界面控件,在回调进入halcon算法时将当前相机获取的图片传入hWindowControl2.HalconWindow显示,故这里直接通过显示控件把图片获取到并保存在HObject变量中。在当前项目可执行文件下的 images2文件夹中,通过当前时间年月日,创建流水文件夹。fileName:保存的路径和图片名称(可自定义)fillColor:填充颜色(默认即可)format:图片属性。image:图片变量。
2025-04-10 12:08:18
512
原创 c#操作打印机打印Excel表格
1.将 Microsoft.Office.Interop.Excel.dll 动态库添加进项目debug文件下。//核心打印方法 worksheet.PrintOutEx();2.项目里添加引用将其加入项目。3.实例化Excel。具体参数详见以下链接。
2025-03-28 17:39:53
472
原创 halcon OCR字符识别与仿射变换示例
OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。当来料角度倾斜时,部分字符识别会出错,这里采用仿射变换的方式,将图像摆正后做处理,可以大大避免误检的情况。*将仿射变换后的区域和图像用作训练集的输入,获得摆正后的字符识别结果,可以避免因角度问题导致的误检。*将原区域放进黑盒子仿射变换出一个新区域,摆正后。*将摆正后的字符区域打散。
2025-03-10 13:31:45
1024
原创 c#INI配置文件的读取写入
例如打印报表功能,用户在勾选需要打印报表选框之后,如果退出重启软件而需要重新勾选的话就不太方便。所以需要对当前是否勾选做保存,然而在软件关闭重启的过程中,所有的变量都会被初始化,这个时候就需要把功能是否勾选这个变量写在程序外部,这里演示用INI配置文件来完成这个操作。在当前项目debug文件夹下创建一个config.ini文件,文件内容如下(具体ini文件如何创建自行搜索,这里不作演示)通过INI配置文件的读取,可以实现代码外的变量保存或是值的保存,对代码的可读性和维护性有很大的提升。
2025-02-05 12:12:50
493
1
原创 Qt QPixmap QImage 图片等比例缩放到指定大小
第三个参数也有两种表现形式,分别为Qt::FastTransformation和Qt::SmoothTransformation。第二个参数有两种表现形式,分别为Qt::IgnoreAspectRatio和Qt::KeepAspectRatio。第一个参数代表缩放后的尺寸。
2023-11-03 21:03:43
8532
原创 QT error: no matching member function for call to ‘connect‘
或者:*connect(控件名,static_cast(&类::函数名),:我们可以在connect中使用强制转换,来确保编译器知道我们需要哪种参数函数。)(参数)>(&类::函数名),控件名,槽函数);:可以在调用connect前先确定我们需要哪种重载。lambda书写方式同理。
2023-11-02 16:32:28
2198
1
原创 static assertion failed:no q_object in the class with the signal
主界面(QMainWindows,QWidget,Qdialog)是有这个关键字的,而QMainWindows是继承QObject的,所以问题不在主界面上。在发送信号的类和接收信号的类的头文件中加上Q_OBJECT,然后重新构建(在项目栏的空白处,鼠标右键的菜单栏里 ‘重新构建’)2、由于Q_OBJECT是半途加入的,需要重新加载编译,解决的办法是直接在.pro文件中随便随便加个空格,再次再编译就可以通过。QT信号与槽机制决定的,由于发送信号的类没有带上Q_OBJECT,所以找不到定义信号。
2023-10-03 11:00:48
1062
原创 解决Qt运行问题:error while building/deploying project demo (kit: desktop qt 5.12.12 mingw 64-bit) when exe
解决 error while building/deploying project demo (kit: desktop qt 5.12.12 mingw 64-bit) when executing step "qmake"
2023-09-30 15:07:22
7635
2
halcon-21.05.00-x64-win64-offline 使用动态库扩展
2025-03-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅