让代码更简单

当前位置:代码狗 > 开发教程 > 工业视觉教程 > 正文

Halcon简单卡尺测量实例

halcon的测量算子非常多,但由于可视化程度不够高,学习起来比较困难,不像VisionPro全程可视化操作。halcon的边缘对测量主要涉及到设置测量区域gen_measure_rectangle2算子,以及测量多组边缘对measure_pairs算子的用法。

Halcon简单卡尺测量实例

Halcon简单卡尺测量实例

gen_measure_rectangle2详解

这个算子有9个参数,它们的含义如下:

  • Row:测量区域中心行坐标
  • Column:测量区域中心列坐标
  • Phi:旋转角度(默认弧度),为正表示逆时针,负表示顺时针
  • Length1:测量区域的长(一半)
  • Length2:测量区域的宽(一半)
  • Width:图像宽
  • Height:图像高
  • Interpolation:插值方式,因存在旋转时,像素不完整,需要计算它的平均值给Profile(见下图说明)
  • MeasureHandle:测量句柄
gen_measure_rectangle2详解

gen_measure_rectangle2详解

gen_measure_rectangle2详解

gen_measure_rectangle2详解

measure_pairs算子详解

measure_pairs适用于有许多组边缘的图像,如果是一组边缘,也可以用measure_pos算子。

  • Image:测量图像
  • MeasureHandle:测量句柄
  • Sigma:高斯平滑的Sigma。
    默认值:1.0
    建议值:0.4,0.6,0.8,1.0,1.5,2.0,3.0,4.0,5.0,7.0,10.0
    典型值范围:0.4≤Sigma≤100(lin)
    最小增量:0.01
    推荐增量:0.1
    限制:Sigma> = 0.4
  • Threshold:最小边缘幅度。
    默认值:30.0
    建议值:5.0,10.0,20.0,30.0,40.0,50.0,60.0,70.0,90.0,110.0
    典型值范围:1≤阈值≤255(lin)
    最小增量:0.5
    推荐增量:2
  • Transition:确定边缘如何分组到边缘对的灰度值转换类型。
    默认值:’all’
    值列表:’all’,’positive’,’negative’,’all_strongest’,’positive_strongest’,’negative_strongest’
  • Select:选择边缘对。
    默认值:’all’
    值列表:’all’,’first’,’last’
  • RowEdgeFirst:第一个边缘中心的行坐标
  • ColumnEdgeFirst:第一个边缘中心的列坐标
  • AmplitudeFirst:第一边缘的边缘幅度(带符号)
  • RowEdgeSecond:第二边缘中心的行坐标
  • ColumnEdgeSecond:第二边缘中心的列坐标
  • AmplitudeSecond:第二边缘的边缘幅度(带符号)
  • IntraDistance:边缘对宽度
  • InterDistance:边缘对之间的宽度(可用来检测数量)

明白上面两个算子的参数含义后,我们就可以写测量代码了,如下:

read_image (Image, 'C:/Users/Administrator/Desktop/testimage/retange.png')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, 640, 640, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_display (Image)
* 
* 定义矩形roi,在其中检测边缘并创建度量
*
Row := 67
Column := 133
Phi := rad(0)
Length1 := 90
Length2 := 10
Interpolation := 'nearest_neighbor'
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation, MeasureHandle)
*
*确定所有具有负过渡的边对,即包围暗区域的边对
*
Sigma := 1.1
Threshold := 20
Transition := 'negative'
Select := 'all'
measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
*
*取得结果,并绘制识别框
*
dev_display (Image)
dev_set_draw ('margin')
dev_set_color ('black')
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
*
*显示并释放内存
*
disp_message (WindowHandle, IntraDistance, 'window', RowEdgeFirst, ColumnEdgeFirst, 'black', 'true')
close_measure (MeasureHandle)

感觉很棒!可以赞赏支持我哟~

赞(1) 打赏

评论 抢沙发

×

请作者吃根烤肠!

支付宝