资源描述
HALCON学习例程中文-IC引脚测量
路径-------C:\ProgramFiles\MVTec\HALCON-10.0\examples\hdevelop\Applications\Measuring-2D\measure_pin.hdev
· Lead Measurement: Example for the application of the measure object
· including a lot of visualization operators.
· First, the length of the leads is measured, then, their width and distance from each other.
· First, read in the image and initialize the program
Read_image (Image, 'icpin')
****取得图像第一通道的指针,同时得到图像宽度高度**
Get_image_pointer1 (Image, Pointer, Type, Width, Height)
*get_image_pointer1 ( Image : : : Pointer, Type, Width, Height ) ;获得图像的数据。如:类型(= ' 字节',' ' ',uint2 int2 等等) 和图像的尺寸( 的宽度和高度)
Dev_close_window ()
dev_close_window ( : : : ) 关闭活跃的图形窗口。
Dev_open_window_fit_image (Image, 0, 0, 509, 509, WindowHandle)
设置窗口自适应图片,获得句柄
Set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
内部程序,设置字体
dev_display (Image)
****显示图像如下:************
· Define and display the rectangular ROIs within which the edges will be detected //ROI设置
Dev_set_draw ('margin')
Dev_se_tline_width (3)
Row := 55
RowBottom := 955
Column := 200
Phi := rad(-90)
Length1 := 50
Length2 := 35
devsetcolor ('gray')
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, RowBottom, Column, Phi, Length1, Length2)
创建ROI的矩形显示区域
*******测量位置如绿色矩形所示下:********
Disp_continue_message (WindowHandle, 'black', 'true')
显示‘继续’信息
stop ()
· Create a measure object for the ROI at the top of the image.
*获取一阶灰度剖面图的插值方法,测量矩形框与图像坐标系之间有角度时生效*
Interpolation := 'nearest_neighbor'
********生成测量矩形框,先测上部********
Gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation, MeasureHandle)
· Determine all edges and calculate the lead height at the top of the image//垂直与矩形的直线边缘的提取。
Sigma := 1.0
Threshold := 30
Transition := 'all'
Select := 'all'
***********进行测量*********
measure_pos (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdge, ColumnEdge, Amplitude, Distance)
提取与矩形或环状弧垂直的直线边缘。
LeadLength1 := Distance
· Display the results
devsetcolor ('white')
**********将测量结果画出********
disp_line (WindowHandle, RowEdge, ColumnEdge-Length2, RowEdge, ColumnEdge+Length2)
disp_message (WindowHandle, 'Lead Length: '+LeadLength1$'.2f', 'window', RowEdge[1]+40, ColumnEdge[1]+100, 'yellow', 'false')
程序写入文本信息
· Shift the measure object and determine the lead height at the bottom of the image
*******转移测量框至新的参考坐标点,及测量下部*****
translate_measure (MeasureHandle, RowBottom, Column)
***********进行测量*********
measure_pos (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdge, ColumnEdge, Amplitude, Distance)
LeadLength2 := Distance
· Display the results
devsetcolor ('white')
**********将测量结果画出********
disp_line (WindowHandle, RowEdge, ColumnEdge-Length2, RowEdge, ColumnEdge+Length2)
disp_message (WindowHandle, 'Lead Length: '+LeadLength2$'.2f', 'window', 360, ColumnEdge[1]+100, 'red', 'false')
· Close the measure
close_measure (MeasureHandle)
清除一个测试对象。
Disp_continue_message (WindowHandle, 'black', 'true')
等待用户操作是否继续
stop ()
· Now, define and display a rectangular ROI perpendicular to the leads and create the measure
dev_display (Image)
Row := 47
Column := 485
Phi := 0
Length1 := 420
Length2 := 8
Interpolation := 'nearest_neighbor'
devsetcolor ('black')
*****创建新的测量矩形ROI,如图蓝色矩形:*****
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
创建ROI矩形
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation, MeasureHandle)
垂直与矩形的直线边缘的提取。
· Determine all edge pairs that have a negative transition, i.e., edge pairs
· that enclose dark regions.
Sigma := 1.0
Threshold := 30
Transition := 'negative'
Select := 'all'
*********进行测量计算并显示结果********
measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
提取测量与矩形或环状弧垂直的直线边缘。
dispcontinuemessage (WindowHandle, 'black', 'true')
stop ()
devsetcolor ('white')
disp_line (WindowHandle, RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond)
avgLeadWidth := sum(IntraDistance)/|IntraDistance|
avgLeadDistance := sum(InterDistance)/|InterDistance|
numLeads := |IntraDistance|
disp_message (WindowHandle, 'Number of Leads: '+numLeads, 'window', 200, 100, 'yellow', 'false')
disp_message (WindowHandle, 'Average Lead Width: '+avgLeadWidth$'.2f', 'window', 260, 100, 'yellow', 'false')
disp_message (WindowHandle, 'Average Lead Distance: '+avgLeadDistance$'.2f', 'window', 320, 100, 'yellow', 'false')
信息显示
dispcontinuemessage (WindowHandle, 'black', 'true')
dispcontinuemessage (WindowHandle, 'black', 'true')
stop ()
· Zoom in to visualize the measurement results in more detail.
· First, define and display the zoom window.
Row1 := 0
Column1 := 600
Row2 := 100
Column2 := 700
devsetcolor ('blue')
*******设置放大区域矩形并显示,图中绿色矩形****
disp_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
显示和坐标轴对齐的矩形。
dispcontinuemessage (WindowHandle, 'black', 'true')
stop ()
· Then, zoom the image and display the results.
******设置图像放大区域并显示***********
Dev_set_part (Row1, Column1, Row2, Column2)
修改显示图像部分。
dev_display (Image)
dev_set_color ('black')
******画出测量矩形ROI和测得的边缘如图*******
dev_display (Rectangle)
pdispedge_marker (RowEdgeFirst, ColumnEdgeFirst, Phi, 5, 'white', 3, WindowHandle)
pdispedge_marker (RowEdgeSecond, ColumnEdgeSecond, Phi, 5, 'white', 3, WindowHandle)
· Close the measure
close_measure (MeasureHandle)
· Reset the display parameters.
devsetpart (0, 0, Height-1, Width-1)
devsetdraw ('fill')
devsetline_width(1)
Copyright ©2014 志强智达
展开阅读全文