* 这个例子计算空瓶子的数量。 * 用漫射前光,正确插入的瓶子可以相对容易地分割用简单的阈值操作,接下来是一些基本的形态学运算。 * 倒置插入的瓶子也被发现,并以橙色显示,而横放的瓶子或大物体则被标记为杂物,并产生警告。
* This example counts bottles in bottle crates of returned empties.
* With diffuse front light,
* correctly inserted bottles can be segmented relatively easy with a simple thresholding operation,
* followed by some basic morphology operations.
* Bottles inserted upside-down are also detected and displayed in orange,
* while across lying bottles or big objects are marked as clutter and produce a warning.
*
* 这个例子计算空瓶子的数量。
* 用漫射前光,正确插入的瓶子可以相对容易地分割用简单的阈值操作,接下来是一些基本的形态学运算。
* 倒置插入的瓶子也被发现,并以橙色显示,而横放的瓶子或大物体则被标记为杂物,并产生警告。
* init
* 初始化
* 获取HALCON系统参数的当前值
* *********************
* set_system( : : SystemParameter, Value : ) 设定系统参数
* border_shape_models: 设置模板是否必须在ROI内
* flush_graphic:图形更新参数,true显示实时更新,false不更新可提高运行速度
* int2_bits:图像缩放相关参数,-1为自动
* backing_store:定义是否刷新所有窗口
* icon_name:定义图形窗口的名称编号
* default_font *):默认字体
* update_lut:是否使用系统默认颜色表
* use_window_thread:Windows下设置为true启用所有halcon的图形文本消息线程,提高运行速度
* graphic_stack_size:设定图形堆栈大小
* x_package:数据传输包大小,如果包过大导致错误,可尝试改小
* neighborhood, "tsp_neighborhood":设定相邻像素为4或8,对使用相邻像素算子产生影响
* init_new_image, "tsp_init_new_image":设定新图像过滤前是否需要填充0,如整幅图像过滤或图像不过滤的区域是没有影响的,可能用于掩盖
* no_object_result, "tsp_no_object_result":如果图像为空是否导致异常,true发出异常
* empty_region_result, "tsp_empty_region_result":空的Region是否导致异常
* store_empty_region, "tsp_store_empty_region":定义空的(没有任何目标)是否作为结果输出
* clip_region, "tsp_clip_region":定义是否修剪Region以适应图像显示
* int_zooming:定义图像适应大小是整数还是浮点
* pregenerate_shape_models:定义是事先生成模板还是使用时创建
* border_shape_models:与图像边缘接触模板定位目标是否有效
* opengl_context_cache_enable:使用显卡加速如果显卡支持,3D
* opengl_hidden_surface_removal_enable:显卡加速,3D效果
* opengl_compatibility_mode_enable:显卡加速使能
* image_dpi:设定保存图片时的DPI分辨率
* width, "tsp_width":系统内部图像宽度
* height, "tsp_height":系统内部图像高度
* current_runlength_number, "tsp_current_runlength_number":Region的最大数量
* reentrant *):设定线程并行化是否需要同步,不同步存在线程安全危险
* thread_num *), "tsp_thread_num":设定并行化线程数量,default为使用物理内核最大数量
* thread_pool *):是否仅使用已有的线程,false可创建新的线程
* flush_file:文件更新,false当进入换行时才更新文件
* ocr_trainf_version:定义学习的OCR文件版本
* filename_encoding:文件名称编码格式
* halcon_dir *):输入halcon安装根目录
* example_dir *):输入范例目录
* image_dir *):输入图像目录
* 3d_model_dir *):输入3D模型目录
* lut_dir *):色彩板目录
* help_dir *):帮助目录
* do_low_error:低等级错误的丢出
* cancel_draw_result, "tsp_cancel_draw_result":被终止算子反应方式,默认绘制终止符不返回错误
* clock_mode:计时方式
* timer_mode计时方式
* max_connection:可输出的最大Region数量,0输出所有
* extern_alloc_funct:函数指针的使用,0使用
* image_cache_capacity *):设定图片空间大小上限
* global_mem_cache:缓存的使用方式
* temporary_mem_cache *):临时缓存的使用,true重载共享,false专有
* alloctmp_max_blocksize:定义最大的存储块大小,temporary_mem_cache为true有效
* database *):数据调试时使用数据表格
* mmx_enable:显卡加速使能,mmx_supported为false无效
* *********************
* store_empty_region, "tsp_store_empty_region":定义空的(没有任何目标)是否作为结果输出
get_system ('store_empty_region', StoreEmptyRegion)
set_system ('store_empty_region', 'false')
read_image (Image, 'bottles/bottle_crate_01')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_update_off ()
dev_set_draw ('margin')
* main loop
* 主循环程序
for Index := 1 to 24 by 1
read_image (Image, 'bottles/bottle_crate_' + Index$'.02')
* extract background
* 提取背景
threshold (Image, BackgroundRegion, 50, 130)
opening_circle (BackgroundRegion, BackgroundRegion, 3.5)
* extract bottle reflections
* 提取瓶反射区域
threshold (Image, Region, 85, 255)
difference (Region, BackgroundRegion, Region)
connection (Region, ConnectedRegions)
* large reflections are judged as clutter
* 大的反射被判定为杂物
select_shape (ConnectedRegions, Clutter, ['width','height'], 'or', [100,100], [500,400])
opening_circle (Clutter, Clutter, 8.5)
difference (ConnectedRegions, Clutter, Region)
connection (Region, ConnectedRegions)
* ignore noise regions
* 忽略噪声区域
select_shape (ConnectedRegions, Candidates, ['width','height'], 'and', [25,25], [100,100])
fill_up (Candidates, FilledCandidates)
opening_circle (FilledCandidates, FilledCandidates, 15.5)
* only 'round' reflections are from bottles
* 只有“圆形”的倒影来自瓶子
select_shape (FilledCandidates, RoundCandidates, 'circularity', 'and', 0.87, 1)
* 卡控 区域的最大直径,选出倒放的瓶子
select_shape (RoundCandidates, BigBottles, 'max_diameter', 'and', 75, 99999)
* display results
dev_set_shape ('ellipse')
count_obj (RoundCandidates, NumBottles)
count_obj (Clutter, NumClutter)
dev_display (Image)
dev_set_line_width (5)
dev_set_color ('lime green')
dev_display (RoundCandidates)
dev_set_color ('goldenrod')
dev_display (BigBottles)
dev_set_color ('red')
dev_display (Clutter)
dev_set_shape ('original')
disp_message (WindowHandle, NumBottles + ' bottles found.', 'window', -1, -1, 'black', 'true')
if (NumClutter > 0)
disp_message (WindowHandle, 'Warning! Clutter detected!', 'window', 40, -1, 'red', 'true')
endif
if (Index < 24)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor
* restore original system settings
set_system ('store_empty_region', StoreEmptyRegion)
|