//会闪屏的代码,更新图像函数如下(以MFC为例)*******************************************************
void CGeomLocationApp::UpdateImageEx(Hobject Image, //图像 Hobject &objDispR, //显示图形红色 Hobject &objDispG, //显示图形绿色 Hobject &objDispB, //显示图形蓝色 Hobject &objDispY, //显示图形黄色 Hlong hWindowHandle, //窗口句柄 BOOL bInitial //是否对图形进行初始化操作 ) { //复位显示图形 if (bInitial==TRUE) { objDispR.Reset(); objDispG.Reset(); objDispB.Reset(); objDispY.Reset(); } //清楚显示窗口 clear_window(hWindowHandle); //显示图像 disp_obj(Image,hWindowHandle); //显示图形 if (objDispR.Id()!=H_EMPTY_REGION) { set_color(hWindowHandle,"red"); disp_obj(objDispR,hWindowHandle); } if (objDispG.Id()!=H_EMPTY_REGION) { set_color(hWindowHandle,"green"); disp_obj(objDispG,hWindowHandle); } if (objDispB.Id()!=H_EMPTY_REGION) { set_color(hWindowHandle,"blue"); disp_obj(objDispB,hWindowHandle); } if (objDispY.Id()!=H_EMPTY_REGION) { set_color(hWindowHandle,"yellow"); disp_obj(objDispY,hWindowHandle); } set_color(hWindowHandle,"red"); }
//会闪屏的代码,更新图像函数如下*******************************************************
如需不闪屏,只需在clear_window前后,加入两个函数,通过设置系统的flush_graphic,来实现,其代码如下
void CGeomLocationApp::UpdateImageEx(Hobject Image, //图像 Hobject &objDispR, //显示图形红色 Hobject &objDispG, //显示图形绿色 Hobject &objDispB, //显示图形蓝色 Hobject &objDispY, //显示图形黄色 Hlong hWindowHandle, //窗口句柄 BOOL bInitial //是否对图形进行初始化操作 ) { //复位显示图形 if (bInitial==TRUE) { objDispR.Reset(); objDispG.Reset(); objDispB.Reset(); objDispY.Reset(); } set_system("flush_graphic","false"); //清楚显示窗口 clear_window(hWindowHandle); set_system("flush_graphic","true"); //显示图像 disp_obj(Image,hWindowHandle); //显示图形 if (objDispR.Id()!=H_EMPTY_REGION) { set_color(hWindowHandle,"red"); disp_obj(objDispR,hWindowHandle); } if (objDispG.Id()!=H_EMPTY_REGION) { set_color(hWindowHandle,"green"); disp_obj(objDispG,hWindowHandle); } if (objDispB.Id()!=H_EMPTY_REGION) { set_color(hWindowHandle,"blue"); disp_obj(objDispB,hWindowHandle); } if (objDispY.Id()!=H_EMPTY_REGION) { set_color(hWindowHandle,"yellow"); disp_obj(objDispY,hWindowHandle); } set_color(hWindowHandle,"red"); }
//其原因是"flush_graphic":图形更新参数,true显示实时更新,false不更新可提高运行速度
其默认为true,实时更新,太是当图像太大时,一来读取是需要,显示时间的,二来清除图像有黑屏这段时间,这使得我们会有闪屏的感觉,这时,我们关闭实时显示,清除后再打更新图像流,便使得图像刷新时不会闪。
同时,也引入下halcon函数中set_system的一些常用参数的意义,其转载自http://blog.csdn.net/xy943294069/article/details/41867973,"sunny被注册"的文章,感谢其分享
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无效
|