使用双视场测量工件长度尺寸

使用双视场测量工件长度尺寸

 

 

很多二次元测量仪进行工件尺寸测量的时候,只能在视场里面测量尺寸比较小的尺寸,

如果测量比较大的尺寸的时候,往往需要移动测量仪上面的镜头,改变视场的位置,这样

测量非常费时(毕竟视场可见面积小嘛)。这次,我们将使用实例介绍在机器视觉大师

系统里面使用双视场(相机)对较长尺寸进行测量。

 

准备工作

直尺一把(没有高精度的标定尺,只能凑合着用,能说明问题就好),两个相机,两个远心镜头,

背光光源一块,简陋实验架,工件若干。如下图:

 

  

 

将相机,镜头,光源安装到实验架以后,运行机器视觉大师,让我们正式开工吧。

 

平面比例标定

一般尺寸测量之类的工作,平面比例标定时必须的。这个比例标定的目的就是计算工作视场

的坐标(单位:mm),与相机成像平面像素单位的比值。这个比值确定以后,我们得出的

结果才有可能是毫米的,而不是像素的值。虽然两个视场的相机都需要标定的,但这里笔者

仅说明一次相机的标定过程。

 

一.       启动运行监视,将直尺放入到其中一个视场里面。

二.       切换模式到十字鼠标状态,(单击菜单“模式”->”对齐”->”十字鼠标”), 使直尺与鼠标

直线对齐,完成以后,停止监视,视场图像这里应该如下:


为了更好地显示, 这里选择显示为居中,缩小。(镜头灰尘太多,画面比较污,呵呵。)

 

三.       点击菜单”标定”->”毫米”,确定视场以毫米为单位。然后点击菜单”标定”->”2d平面比例”打开

标定窗口。


四.       调整两个MARK控件到合适的位置,然后在”实际长度”文本框里面输入实际的长度值,点击”学习”,

当前视场的平面比例标定工作完成。

 

 

测量算子设计

在实际测量工件的过程中,测量员使用游标卡尺对两个边缘进行对齐,从而获取该工件的尺寸。根据这个原理,

笔者分别在两个视场里面设计一个边缘检测算子,对单边进行测量,将两边距离相加减,即可获得工件尺寸。

由于双视场的算子分布在不同的视场里面,还需要分别设计位置参考算子,以完成工件尺寸的测量。

 

添加位置参考算子

在两个视场下面放置直尺,使两个相机都可以拍摄到直尺,然后进行适当对齐(请参考平面比例标定做法)。

 

一.           分别在两个视场添加为一个位置参考算子。其中一个算子刻度放在11(厘米),另外一个放在直尺的20(厘米)位置。

 

二.           双击视场一的位置参考算子,调出该算子的属性设置框,将其参考位置设置为0。如下图:

      

      同样的方法,将另外一个视场的算子参考位置设置为90(即200-110),记住单位为毫米,前面标定

的时候已经设置了。

 

 

添加边缘检测算子

将待测工件放置在视场下,分别在两个视场放置边缘检测算子,为了方便查看,将视场窗口设置垂直并排显示。如下图:

 

双击视场一的边缘检测算子控件,调出参数设置窗口。在专用页面,设置当前边缘为第一边(左边),选择相对强度,同时

禁用第二边(右边)。在预览窗口,可以看到当前的边缘位置在工件图像的边缘处。


同样的方法设置另一个视场的边缘检测算子,只是禁用第一边,而使用第二边(右边)。

 

最终设计的算子如下:

 

编写脚本

到现在为止,笔者做的仅仅是设计必要的算子。要真正测出工件的长度,还需要进行最后一步:编写

脚本。

 

点击菜单”模式”->”编辑脚本”, 弹出”编辑脚本”对话框。选择测量类型为“尺寸测量”。


下面分别解释每个语句的含义

 

d1 = (mcam1.rpos1.pos -  mcam1.edist1.n1) / mcam1.SCALE_X

这句算术表达式就是将视场一里面位置参考算子的位置与边缘检测算子检测到的第一边的位置相减,

获得两个位置的距离,然后除以像素与毫米的比例,获得实际距离。

 

d2 = ( mcam2.edist1.n2 - mcam2.rpos1.pos  ) / mcam2.SCALE_X

这句算术表达式与上面一句含义一样,只是边缘检测算子在位置参考算子的右边,只能使用边缘检测

算子第二边的距离减去参考算子的位置,以获得实际距离。

 

mvs.ms1=d1+d2 + 90

这句算术表达式实际就是将两个距离与参考距离的值相加而已。(注意:90为我们的参考距离。)这

个语句也可以更改为 mvs.ms1=d1+d2 + mcam2.rpos1.actu,其计算结果一样。

 

尺寸测量类任务最多可以支持4个尺寸同时测量,供支持12个变量。具体如下:

变量名

说明

类型

ms1

测量的尺寸一的实际值

数值

ws1

测量的尺寸一的标准值

数值

dif1

测量的尺寸一的标准值与实际值的差值

数值

ms2

测量的尺寸二的实际值

数值

ws2

测量的尺寸二的标准值

数值

dif2

测量的尺寸二的标准值与实际值的差值

数值

ms3

测量的尺寸三的实际值

数值

ws3

测量的尺寸三的标准值

数值

dif3

测量的尺寸三的标准值与实际值的差值

数值

ms4

测量的尺寸四的实际值

数值

ws4

测量的尺寸四的标准值

数值

dif4

测量的尺寸四的标准值与实际值的差值

数值

 在实际应用中,用户可以根据需要计算上面的变量。

 

检测运行

点击菜单”相机”->”测量运行”,进入检测状态。

 

放置工件到视场位置(温馨提醒: 将工件的两个边缘放置在各自视场的边缘算子里面,

否则检测将不正确。这次测试的边缘检测算子拉的足够长,非常轻松地可以做到这一点),然后,

点击”下一个”按钮。将完成一次自动测量。

 

下面是实际测量的记录。

 

结束语

笔者使用的机械结构和工件都是随意制作的,精度不是很高。但从结果上看,测量结果

基本与设计的值相差不大。在正式的产品测量仪或机械装置中,如果要获得比较高的精度,

不但需要保证机构的精度,而且,需要使用高精度的标定尺对视场比例,参考位置的距离

进行高精度标定,从而获得更高的测量精度。



最新版多多摄像头大师(机器视觉大师)下载地址:http://www.hdy.net.cn/softshare/ddcam.htm

技术交流QQ群: 295860595  该群文件空间即时更新多多摄像头大师最新版本



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在OpenCV中,你可以利用计算机视觉技术实现实时物体尺寸测量。以下是一个基本步骤: 1. **视频或图像输入**:首先,你需要获取摄像头捕获的实时视频流或者从文件读取静态图片。 2. **物体检测**:利用OpenCV中的Haar级联分类器、HOG+SVM或其他目标检测算法(如YOLO, SSD等),定位到你要测量的物体。 3. **边界框提取**:对于每个检测到的物体,计算并绘制其边界框,通常包括中心点、宽度和高度信息。 4. **图像坐标到实际尺寸转换**:如果你知道相机的参数(如焦距、视场角等),可以通过像素值除以这些参数,将像素坐标转换为物理尺寸(例如毫米)。 5. **显示结果**:在原图上添加测量结果显示物体的实际尺寸,并可能提供动态更新。 ```python import cv2 import numpy as np # 加载摄像机 cap = cv2.VideoCapture(0) while True: # 获取一帧 ret, frame = cap.read() # 物体检测 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) objects = cv2.CascadeClassifier('object_detection.xml').detectMultiScale(gray) for (x, y, w, h) in objects: # 计算尺寸并显示 size_in_mm = calculate_size_from_pixels(w, h, camera_params) # 假设calculate_size_from_pixels是一个函数 cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) cv2.putText(frame, f"Size: {size_in_mm} mm", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) cv2.imshow("Object Size Measurement", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值