Halcon 一维测量

1. 什么是一维测量

  • 一维测量就是在图像中沿着某一个方向取寻找边,并且得到边与边之间的距离(像素)

2. 测量矩形

2.1 算子

生成测量矩形
gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation : MeasureHandle)

  • Row, Column,Phi:测量矩形中心的行列坐标和角度;
  • Length1, Length2:测量矩形的板宽和半高;
  • Width, Height:测量矩形所在的图像的宽和高;
  • Interpolation:插值算法
  • MeasureHandle:测量矩形的句柄

不带边缘对查找
measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)

  • MeasureHandle:测量矩形的句柄;
  • Sigma:高斯平滑系数;
  • Threshold:最小边缘幅度;
  • Transition:过度,亮到暗’negative’, 暗到亮’positive’,两种都要’all’
  • Select :如果设置为’all’,则返回所有边缘点。 如果将其设置为’ first’,则仅返回提取的边缘点中的第一个,而将其设置为’last’时,仅返回最后一个。
  • RowEdge, ColumnEdge:边缘点行列坐标
  • Amplitude:返回边缘幅度
  • Distance:返回连续边之间的距离

带边缘对查找
measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)

  • MeasureHandle:测量矩形的句柄;
  • Sigma:高斯平滑系数;
  • Threshold:最小边缘幅度;
  • Transition:过度,亮到暗’negative’, 暗到亮’positive’,两种都要’all’
  • Select :如果设置为’all’,则返回所有边缘点。 如果将其设置为’ first’,则仅返回提取的边缘点中的第一个,而将其设置为’last’时,仅返回最后一个。
  • RowEdgeFirst, ColumnEdgeFirst,AmplitudeFirst:第一条边中心的行列坐标和边缘幅度
  • RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond:第二条边中心的行列坐标和边缘幅度
  • IntraDistance:返回边缘对中两条边之间的距离
  • Distance:返回连续两个边缘对之间的距离

关闭测量矩形
close_measure (MeasureHandle)

2.2 测量案例

在这里插入图片描述

*1. 读入图像
read_image (Fuse, 'fuse')
get_image_size (Fuse, Width, Height)
*2. 生成测量矩形
Angle:=rad(90)
Length2:=30
gen_rectangle2 (Rectangle, 296, 543, Angle, 70, 30)
gen_measure_rectangle2 (296, 543, Angle, 70, 30,  Width, Height, 'nearest_neighbor', MsrHandle)
*3. 一维测量
measure_pairs (Fuse, MsrHandle, 1.5, 15, 'all', 'all', RowFirst, ColumnFirst, AmplitudeFirst, RowSecond, ColumnSecond, AmplitudeSecond, WidthPairs, DistancePairs)
*4. 显示
dev_set_line_width (3)
dev_set_draw ('margin')
dev_get_window (WindowHandle)
gen_empty_obj (objects)
for i := 0 to |RowFirst|-1 by 1
     gen_contour_polygon_xld (EdgeFirst, [-sin(Angle + rad(90)) * Length2 + RowFirst[i],-sin(Angle - rad(90)) * Length2 + RowFirst[i]], [cos(Angle + rad(90)) * Length2 + ColumnFirst[i],cos(Angle - rad(90)) * Length2 + ColumnFirst[i]])
     gen_contour_polygon_xld (EdgeSecond,[RowSecond[i]-Length2*cos(Angle),RowSecond[i]+Length2*cos(Angle)],[ColumnSecond[i]-Length2*sin(Angle),ColumnSecond[i]+Length2*sin(Angle)] )
     concat_obj (objects, EdgeFirst, objects)
     concat_obj (objects, EdgeSecond, objects)
endfor
dev_display (Fuse)
dev_display (objects)
stop ()

dev_display (Rectangle)
disp_arrow (WindowHandle, RowFirst[0]+20, ColumnFirst[0], RowSecond[1]-20, ColumnSecond[1], 1)

*5关闭测量矩形
close_measure (MsrHandle)

3. 测量弧形

3.1 算子

生成测量弧形
gen_measure_arc( : : CenterRow, CenterCol, Radius, AngleStart, AngleExtent, AnnulusRadius, Width, Height, Interpolation : MeasureHandle)

  • CenterRow, CenterCol, Radius:测量弧形的中心坐标和半径
  • AngleStart, AngleExtent:测量弧形的起始角度和角度范围
  • AnnulusRadius:圆环(测量)的半径,半宽
  • Width, Height:图像宽高
  • IntraDistance:返回边缘对中两条边之间的距离
  • MeasureHandle:测量弧形句柄

3.2 测量案例

在这里插入图片描述

*1读入图像
read_image (Zeiss1, 'zeiss1')
get_image_size (Zeiss1, Width1, Height1)
dev_get_window (WindowHandle)
*2产生测量弧形
AngleStart := 2.06229//起始角度
AngleExtent :=-3.13549//角度范围
Row := 270.722//圆心行
Column := 339.749//圆心列
Radius := 106.631//半径
get_points_ellipse (AngleStart + AngleExtent, Row, Column, 0, Radius, Radius, RowPoint, ColPoint)
disp_arc (WindowHandle, Row, Column, AngleExtent, RowPoint, ColPoint)
***生成测量弧形
gen_measure_arc (Row, Column, Radius, AngleStart, AngleExtent, 12.5,Width1, Height1, 'nearest_neighbor', MeasureHandle1)
*3测量
measure_pos (Zeiss1, MeasureHandle1, 1, 5, 'all', 'all', RowEdge1, ColumnEdge1, Amplitude1, Distance1)
distance_pp(RowEdge1[1],ColumnEdge1[1],RowEdge1[2],ColumnEdge1[2],distance)
*4显示
dev_display (Zeiss1)
disp_arc (WindowHandle, Row, Column, AngleExtent, RowPoint, ColPoint)
dev_set_color ('green')
dev_set_line_width (5)
disp_line (WindowHandle,RowEdge1[1],ColumnEdge1[1],RowEdge1[2],ColumnEdge1[2])
set_display_font (WindowHandle, 26, 'mono', 'true', 'false')
disp_message (WindowHandle, '距离'+distance+'pixel', 'window', 85, 85, 'black', 'true')
*5关闭测量弧形
close_measure (MeasureHandle1)

4. 下载地址

相关代码和图片下载:

链接:https://pan.baidu.com/s/1W_HocLmUtgLhSP1cq7VquA
提取码:omk5
在这里插入图片描述

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MechMaster

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

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

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

打赏作者

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

抵扣说明:

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

余额充值