halcon的测量算子非常多,但由于可视化程度不够高,学习起来比较困难,不像VisionPro全程可视化操作。halcon的边缘对测量主要涉及到设置测量区域gen_measure_rectangle2
算子,以及测量多组边缘对measure_pairs
算子的用法。
gen_measure_rectangle2详解
这个算子有9个参数,它们的含义如下:
- Row:测量区域中心行坐标
- Column:测量区域中心列坐标
- Phi:旋转角度(默认弧度),为正表示逆时针,负表示顺时针
- Length1:测量区域的长(一半)
- Length2:测量区域的宽(一半)
- Width:图像宽
- Height:图像高
- Interpolation:插值方式,因存在旋转时,像素不完整,需要计算它的平均值给Profile(见下图说明)
- MeasureHandle:测量句柄
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)
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/241852.html