Halcon的定位是一个类库,有着完整、快速实现的算子函数,提供了HDevelop作为快速开发的图形化(IDE)界面;但是它不是一个完整的最终应用软件,所以没有用户界面,也不提供显示的数据。
下面从实例来说明显事图像、区域、XLD和文本的主要特征。功能:它是一个小的调用进程处理四种不同的数据类型的主程序。在HDevelop下编写实现特定显示操作符,它与其他如C++、C#或Visual Basic的语言接口通信的方式实现。
主要的步骤包括五个步骤:open_window、display_image、disp_regions、
disp_xld和disp_text。要在单独步骤的程序中选择,可以在编程窗口中使用组合框Procedures。下面,解释每个步骤被选择的部分。
read_image (Image, 'fabrik')
dev_open_window (0, 0, 512, 300, 'black', WindowHandle)
disp_image (Image, WindowHandle)
regiongrowing (Image, Regions, 1, 1, 3, 100)
disp_region (Regions, WindowHandle)
edges_sub_pix (Image, Edges, 'lanser2', 0.5, 10, 30)
disp_xld(Edges, WindowHandle)
disp_text_button(WindowHandle, 'Text', 'window', 200, 200, 'black','gray')
dev_open_window是打开与图像相同尺寸的图形窗口的支柱步骤。它通过调用get_image_pointer1存取图像尺寸来实现。在打开新的窗口前,现有的窗口被关闭。要因此适应坐标系,调用dev_set_part。最后,HDevelop自动显示每个结果的默认行为被切断。
get_image_pointer1(Image, _, _, Width, Height)
dev_close_window()
dev_open_window(0, 0, Width, Height, ’white’, WindowHandle)
dev_set_part (0,0, Height-1, Width-1)
dev_update_window(’off’)
然后,调用图像显示程序:disp_image。它用Image和WindowHandle作为输入参数。首先,窗口被激活,对HDevelop来说不需要再次激活,但是对于其他编程环境来说这很重要。现在,图像显示在图形窗口中。要改变查询表(LUT),调用dev_set_lut,这样在再次调用dev_display后,效果将变成可视的。
dev_set_window (WindowHandle)
dev_display (Image)
dev_set_lut (’temperature’)
dev_display (Image)
接着,使用一个叫做3D图形的显示图像的一部分。这里,灰度值被作为高度信息。对于这种模式,LUT被使用。
gen_rectangle1(Rectangle, 358, 298, 387, 329)
dev_set_draw('margin')
dev_set_color('yellow')
dev_display(Rectangle)
dev_set_part (358,298, 387, 329)
dev_set_lut('twenty_four')
dev_set_paint(['3D-plot_hidden',7,1,110,160,600,0,0])
dev_display(Image)
它首先显示背景图片,然后为区域设定显示参数。dev_set_draw指明只有区域边界被可视化。dev_set_colored激活了多彩色模式,在该模式下每个区域用不同的颜色显示。替代简单地指出区域的原始形状,HALCON能让你用dev_set_shape改变形状。如下,选择显示等价的椭圆。
read_image (Image, 'fabrik')
dev_display (Image)
dev_set_draw ('margin')
dev_set_colored (6)
dev_display (Regions)
dev_display (Image)
dev_set_shape ('ellipse')
dev_display (Regions)
程序包括一个while循环,当按下鼠标右键时程序结束。鼠标操作get_mbutton等待到用户用鼠标在图形窗口点击,然后返回坐标和按钮值。通过使用select_region_point,该坐标被用来选择包含该点的区域。对于该区域,用area_center来计算大小和重心。首先,文本光标用set_tposition放置,然后使用write_string显示值。
Button := 0
while (Button # 4)
get_mbutton (WindowHandle, Row,Column, Button)
select_region_point (Regions,DestRegions, Row, Column)
area_center (DestRegions, Area,RowCenter, ColumnCenter)
if (|Area| > 0)
set_tposition (WindowHandle, Row,Column)
dev_set_color (‘yellow’)
write_string (WindowHandle, ‘(‘+RowCenter+’,’+ColumnCenter+’)= ‘+Area)
endif
endwhile
领取专属 10元无门槛券
私享最新 技术干货