毕设: 视觉测量仪软件 (中)

3 篇文章 0 订阅
3 篇文章 0 订阅

记录大学毕业设计
毕设题目:2D视觉测量仪软件设计
目标:指定测量尺寸,模板设计,在线测量,结果保存,报表设计等功能,根据实验室硬件条件,设计出0.01mm级的检测精度的测量平台。

此文章关于毕设的测量系统软件设计。
软件源代码链接在文末处,创作不易,感谢大家支持。

一、环境配置与图像采集

1、软件系统配置
本软件系统是基于VisualStudio2022上搭建WinForm界面并与Halcon联合,对CMOS传感器采集到的图像进行图像处理是通过Halcon算法库实现;要使软件稳定运行,需将Halcon配置到VisualStudio2022中。首先,在电脑系统上下载并安装VisualStudio2022和Halcon软件,确保都是64位版本。打开VisualStudio2022,创建一个C#WindowsForm应用程序。在项目中引用Halcon安装目录里的DLL文件。在VS应用程序的解决方案资源管理器中,鼠标在“引用”位置右键单击选择“添加引用”。添加引用图如下:
在这里插入图片描述

在弹出的引用管理器对话框中,点击下方的“浏览”按钮。在浏览对话框中,选择Halcon安装目录下的halcondotnet.dll文件,点击添加并确定。接下来,需要添加Halcon图像显示控件到工具箱中,以便在界面设计中使用。在VisualStudio左侧的工具箱中,空白区域点击鼠标右键,选择“选择项”。添加图像显示控件图如下:
在这里插入图片描述

在“.NETFramework组件”页中点击“浏览”按钮,再次选择刚刚Halcon安装目录下引用的halcondotnet.dll文件,点击添加。
2、图像采集
在本系统中,使用Halcon连接海康相机进行图像采集,主要依赖于海康相机的MVS自开发驱动与Halcon连接采图。MVS自开发驱动安装图如下:
在这里插入图片描述

首先,找到适用于第三方连接MVS软件的.dll文件,根据安装版本和电脑配置信息进行确定。可以在海康相机的官方网站或文档中找到相关的DLL文件。海康的DLL文件图如下:
在这里插入图片描述

将找到MVS软件的.dll文件复制到Halcon的安装路径下的bin文件夹中。这通常是Halcon的安装目录下的bin文件夹,例如"C:\ProgramFiles\MVTec\Halcon19.0\bin"。在Halcon中使用MVSion接口进行相机连接。可以使用Halcon的图像采集接口imageacquisition来调用MVSion接口,并生成代码从而与海康相机建立连接。在连接CMOS传感器时,需要注意关闭电脑的防火墙,否则系统可能无法检测到CMOS传感器。这可以避免因防火墙设置导致的连接问题。

二、模板制作功能

1、窗口交互功能
在VisualStudio中创建一个C#WindowsForm应用程序,在解决方案资源管理器中,双击Form1.cs文件,打开窗体设计器。引用Halcon的.NET接口库,将Halcon窗口添加到窗体中,在窗体设计器中,添加Halcon的HWindowControl控件,可以通过“工具箱”中的搜索框搜索“HWindowControl”进行添加。在窗体中添加画图工具栏和画布,在窗体设计器中,添加ToolStrip控件,用于放置画图工具按钮。在ToolStrip控件中添加Button控件,用于实现画矩形、画圆、画线等操作。
HObject.ReadImage方法用于读取图像,HWindowControl.HalconWindow.DispObj方法用于将图像显示在Halcon窗口中,HWindowControl.HalconWindow.GetMposition方法用于获取鼠标在Halcon坐标系下的坐标,HOperatorSet.DrawLine方法用于在图像上画线,HWindowControl.HalconWindow.GetMposition方法用于获取鼠标在Halcon坐标系下的坐标,HOperatorSet.DrawRectangle方法用于在图像上画矩形,窗口上画矩形如下:
在这里插入图片描述

还有一些窗体交互算子,其中HOperatorSet.DrawCircle方法用于在图像上画圆形,HWindowControl.HalconWindow.ClearWindow方法用于清空窗口,方便下一次进行窗体交互,HWindowControl.HalconWindow.DispObj方法用于将画好的图像显示在窗口中。
2、模板创建功能
基于Halcon相机采集及2D测量系统中要满足连续测量、批量测量的需求,通常需要创建模板来保存所要测量的图元、基本尺寸以及公差,以便后续的测量操作。模板创建主要分为三个部分:形状模板的创建、计量模板的创建以及配置参数信息的保存。
在形状模板的创建中,需要先选择相应的形状模板类型,例如圆形、矩形、椭圆等,然后通过绘制工具在模板中绘制出相应的形状,调整形状的大小和位置,以满足实际测量的需求。在计量模板的创建中,需要设置相应的基本尺寸和公差,以便后续的测量操作。在待测图元的属性保存中,需要将形状模板和计量模板的信息保存到相应的文件中,以便后续的测量操作。保存的文件包括sbm文件、mtr文件以及ini文件。模板文件图如下:
在这里插入图片描述

其中,sbm文件保存了形状模板的信息,mtr文件保存了计量模板的信息,而ini文件则保存了模板生成和测量的参数信息。参数模板ini文件可视化图如下:
在这里插入图片描述

首先创建一个形状模板,用于在图像中匹配相似的形状。首先在窗口中显示提示信息,要求用户绘制模板区域并确认。然后,根据用户绘制的矩形参数,包括矩形中心点坐标、旋转角度、长度和宽度等,生成矩形区域,即模板区域。接着,在原图上减去模板区域,得到模板图像。为了确保精度,还需清除之前的形状模板。接下来,根据模板图像、起始角度、角度范围、度量方法等参数,创建形状模板。为了方便观察,还需在窗口中显示原图和模板区域。最后,判断模板是否创建成功,如果模板ID不为空,则认为模板创建成功;否则模板创建失败。根据判断结果,在窗口中显示相应的成功或失败信息,并返回对应的结果,实现了在图像处理中常用的形状匹配功能。
完成形状模板的创建,接下来需要创建计量模板。以创建线的计量模板为例,首先将窗口控件设置为焦点,以便用户能够在窗口中进行绘图操作。然后,创建两个测量模型句柄,一个用于存储用户绘制的直线的测量结果,另一个用于将第一条直线的测量结果作为输入参数进行测量。
在窗口中显示提示信息,要求用户利用HOperatorSet.DrawLine函数在图像上绘制一条直线。用户绘制完第一条直线后,然后利用HOperatorSet.AddMetrologyObjectLineMeasure函数向测量句柄中添加一条线测量对象,并设置相关参数,如过渡类型、线宽、颜色等。接着,利用HOperatorSet.ApplyMetrologyModel函数将测量模型应用于图像,得到测量结果的轮廓,并通过HOperatorSet.DispObj函数将其显示在窗口中。此时,用户可以通过HOperatorSet.GetClick操作,获取直线的起点和终点坐标,并将其存储在变量中。
接下来,通过HOperatorSet.GetMetrologyObjectResult函数获取测量对象结果的线模型,并将其存储在过渡变量lineParams.LineModel中,以便测量模型能够正确地计算直线的长度和角度。然后,将第一条直线添加到第一个测量句柄中进行测量,并获取其测量结果。
接着,将第一条直线的测量结果添加到第二个测量句柄中作为输入参数,再次利用HOperatorSet.ApplyMetrologyModel函数将测量模型应用于图像,并获取第一条直线的测量结果。最后,将第一条直线的起点和终点坐标存储在变量中,以便后续的图像模板匹配和直线拟合。窗口上创建直线计量模板图如下:
在这里插入图片描述

通过创建模板并保存相应的文件,可以实现连续测量、批量测量等操作,提高测量的效率和精度,为后续的图像模板匹配和直线拟合基础数据。同时,保存模板生成和测量的参数信息到文本文件ini中,可以满足读取模板相关参数的要求。
3、系统标定功能
本系统采用双远心镜头,原因在于该镜头具有低畸变率和图像效果亮度几乎完全一致的特点。为了提高标定的准确性和可靠性,我们采用了模板工件进行像素转换标定。在选择模板工件时,建议选择规则形状和对称性的工件,如正方形或圆形,并确保其完整无损,没有反光或遮挡。在拍摄时,需要调整相机曝光时间、焦距、光圈等参数,以确保图像清晰、对比度高。接下来,使用边缘检测算法提取模板工件图像中的边缘,通常基于梯度或拉普拉斯算子,能够自动识别模板工件的边缘。然后,使用像素转换算法计算像素转换矩阵,通常基于相机的内部和外部参数以及模板工件的边缘坐标。最后,使用模板工件进行像素转换,以计算出每个像素点代表的实际距离。标定成功图如下:
在这里插入图片描述

完成标定后,可以使用标定结果对图像进行校正、测量、定位等操作,并与实际结果进行比较,以验证标定的精度和可靠性。

三、测量功能

1、圆半径测量
在窗口中放置button控件,该按钮的点击事件处理函数用于开始圆测量操作。首先从文本框中获取最大距离和最小距离的参数值,并存入结构体circleParams中。然后调用Measure函数进行测量操作,将图像和窗口句柄作为参数传入。Measure是封装成一个函数,方便调用和重复使用。
测量函数主要实现方法是,首先需要定义一个字符串变量ResultStr来保存匹配和拟合结果的信息。然后从文本框中获取参数值,将其存入一个结构体matchParams中,用于后续的匹配操作。接着在图像中查找形状模板,返回匹配结果和变换矩阵homMat2D。如果匹配失败,需要在窗口中显示错误信息,并返回失败结果,将匹配结果的错误信息保存到ResultStr中。如果匹配成功,需要在匹配结果中拟合圆形,并返回拟合结果和拟合圆形的区域。如果拟合失败,也需要在窗口中显示错误信息,并返回失败结果,将拟合结果的错误信息保存到ResultStr中。接下来需要计算测量距离,并将结果保存到ResultStr中。同时需要判断测量距离是否在合理范围内。如果是,则在ResultStr中加入"OK",否则加入"NG"。最后返回成功结果。圆半径测量成功图如下:
在这里插入图片描述

如果测量成功,会输出测量结果并将数据存入数据库中。具体来说,会将测量时间、圆半径、分度值等信息存入数据库,并在程序中保存这些信息,用于后续的展示和分析操作。如果测量失败,会输出错误信息。
2、两线距离测量
在窗口中放置button控件,该按钮的点击事件处理函数用于开始线测量操作。对图像进行模板匹配和直线拟合,然后根据测量结果判断是否为OK或NG。设置匹配参数,包括起始角度、范围、重叠度、分数和数量等。调用模板匹配函数FindShapeModel(),查找模板。如果查找失败,返回错误信息,并将错误信息保存到ResultStr中。调用拟合直线函数Fit_Line(),拟合直线。如果拟合失败,返回错误信息,并将错误信息保存到ResultStr中。调用AngleLl()函数和DistanceSs()函数,计算直线的角度和距离。将直线距离乘以圆的缩放比例,得到实际距离。将测量结果保存到ResultStr中,包括测量距离和OK/NG状态。根据测量结果判断是否为OK或NG,将结果保存到ResultStr和lineParams中。最后返回操作成功的结果。两线间距离测量成功图如下:
在这里插入图片描述

总的来说,这部分功能是对图像进行测量,并给出测量结果。其中,模板匹配和直线拟合是关键步骤,它们的精度和效率会直接影响测量结果的准确性和速度。同时,代码中的参数设置也要根据实际情况进行调整,以达到最佳的匹配和拟合效果。对于测量结果的判断和保存也要考虑到实际应用的需求,以便后续的处理和分析。

四、登录和报表功能

1、用户登录界面
启用应用程序的可视化样式和设置应用程序的兼容文本呈现为false,然后,创建一个新的登录界面窗体(Form1)。如果用户在该窗体上成功登录,即对话框结果为OK,它将运行一个新的主窗体(FrmMain)。这段代码是整个应用程序的入口点,用于控制应用程序的启动流程。
在登录界面窗体加入一个button按钮,按钮登录的方法,是鼠标单击按钮时触发的事件处理程序。该方法的功能是从SQLite数据库中查询用户信息,并与文本框中输入的用户名和密码进行比较。首先,创建一个SQLiteConnectionStringBuilder对象,用于设置连接字符串的数据源。然后,创建一个SQLiteConnection对象,并打开连接。接着,构建一个SQL查询语句,用于查询User表中的所有数据。使用SQLiteDataAdapter对象执行该查询,并将结果填充到DataSet中的第一个DataTable中。在遍历DataTable的每一行时,将该行的name和password列的值分别赋值给变量dlname和dlmark。然后,如果dlname与textBox1中的文本账号相等,则继续比较dlmark和textBox2中的文本密码。如果两者均相等,则将b的值设为1。如果只有dlname相等,则将bw的值设为1。登录界面图如下:
在这里插入图片描述

具体实现方法,首先判断变量bw的值是否为0,如果是,则说明输入的用户名不存在,此时会弹出一个"账号不存在"的消息框提示。否则,再判断变量b的值是否为0,如果是,则说明输入的密码不正确,此时会弹出一个"密码不正确"的消息框提示。如果两个变量的值都不为0,则说明输入的用户名和密码均正确,弹出一个消息框提示"登陆成功",并将对话框的DialogResult属性设置为DialogResult.OK,表示用户已经成功登陆。最后,释放SQLiteDataAdapter对象和连接对象,并结束该方法。
2、数据保存及报表
当完成圆或者直线测量后,会输出测量结果并将数据存入数据库中,并且会将测量时间、圆半径、分度值等信息存入DataGridView控件,此控件是WindowsForms中的一个数据显示控件,用于在表格中显示和编辑数据。DataGridView控件可以自动根据数据源的结构自动生成列,并且可以对列进行自定义设置,包括列宽、列头、单元格格式等。同时,DataGridView控件还支持排序、筛选、分组等功能,使得数据的展示和操作更加灵活和方便。除此之外,DataGridView控件还支持事件处理,可以在用户操作控件时触发相应的事件,以便进行自定义的处理。因此,DataGridView控件是WindowsForms中非常重要的数据显示和交互控件之一。另外,在界面中加入一个导出Excel按钮控件,点击按钮后功能是将DataGridView控件中的数据导出到Excel文件中。首先,需要判断DataGridView控件中是否有数据,若无,则会弹出提示框。若有数据,则会调用ExportDataToExcel方法将数据导出到Excel文件中。数据报表界面图如下:
在这里插入图片描述

具体实现方法为,首先弹出保存对话框,让用户选择保存的位置和文件名;接着遍历DataGridView控件的列,将可见列的列名写入StringBuilder中;然后遍历DataGridView控件的行,将可见列的单元格值写入StringBuilder中;最后将StringBuilder中的内容写入文件中。导出成功后,会弹出提示框。

创作不易,感谢大家支持。
***完整代码:https://m.tb.cn/h.g8oqHDz?tk=unsw3X5lNVp CZ3458 ***

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Single118

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值