halcon知识点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异。什么原因引起?
初步诊断是,显示的时候调用的颜色查找表存在异常不是default ,而是其它选项。此时可以通过查阅相关参数,调用set_system解决,也可以在编辑-》参数选择-》颜色查找表进行更改。
2. 裁剪图像;从图像上截取某段图像进行保存。如何实现该操作?
首先应该知道,region不具有单独构成图像的要素,他没有灰度值。有用过opencv的应该知道ROI(感兴趣区域),设置好它后,对图像的大部分操作就转为图像的一个矩形区域内进行。类似的,halcon有domain 概念。首先设置好一个矩形区,然后使用reduce_domain (是一个矩形区域)后,再使用crop_domain就裁剪出图像。
3. 读入bmp,或tiff 图像显示该图不是bmp文件或不能读。原因是什么?
这个常有新手询问,画图,图像管理器都能打开,又或者是相机采集完直接存到硬盘。Halcon 读取图像在windows下面到最后是调用windows库函数实现读图功能。咱不清楚到底是怎么调用的。对于图像格式,在读图函数F1说明很细。基本bmp 如果文件头不是bw还是bm(百度百科bmp格式查找,编写此处时无网络,后续可能忘记),就读不进来。其他规格欢迎补充。解决办法,如果是相机采集,就在内存直接转换(参见halcon到VC.pdf 里面的halcon和bitmap互转);如果是采完的图片,大部分通过画图工具转换为24位bmp格式,即可解决。
4.读入avi文件报错。
Halcon通过directshow或另一个格式解析视频,正常来说应该可以读入市面大部分视频,实际测试发现只能读入最标准的avi文件格式。如果需要临时处理,需要下格式工厂等工具转化为最标准的avi文件格式(论坛叶诺有发帖说明)。
5. Region 或xld筛选。
Halcon提供了丰富的region 和xld筛选方法。Region可以使用select_shape_xld,选择出符合要求的区域,如果不能满足还可以通过类似region feature 这样关键字组合成的算子获取区域特征,然后通过tuple 排序或相加减,再通过tuple_find确定是对应哪个区域的特征。同样的halcon也提供了select_contours_xld进行轮廓筛选。
6. Halcon分几类对象,每个类的功用是?
Halcon总分俩大类,tuple和图标对象obj。Tuple涵盖了对所有基础数据类型的封装,可以理解为她是halcon定义的数组类。Obj是alcon定义图标类基类。衍生出了许多类型,其中Region ,Xld,Image 其中最主要的类型。
7. F1说明,参数部分-array 是什么意思?
该符号说明,该参数接受一组输入,对tuple就是一组tuple,对obj就是通过concat_obj或其它操作产生的一组obj元组。
8. 俩个相对方形物体的距离计算。
如果这俩个物体和背景对比清晰,最近的距离在俩条边下则可以再预处理之后进行如下操作:
1. Segement_contours_xld分割边缘线段(edgeXXXX等得到的边缘);
2. select_contours_xld选择出特定的长度或方向边缘;
3. 假设此时刚好获取俩条线,则可以利用distance_ll,求得距离,也可以自己fit_lineXXXX 拟合直线再求距离;
以上是一种方法,另一种常见方法是利用measure_pos或measure_pair进行测量,不熟悉的可以翻看示例或者使用测量助手进行测量。
9. 创建过程或函数,或者全文编辑。
在算子编辑窗口,main所在行右边,有四个按钮,将鼠标移到该位置,将有中文提示,按提示点击按钮。
10. 从其它halcon环境窗口复制函数或算子复制到新建的halcon窗口,无法使用,提示不识别。
除了敲错,此种情况都是由于该函数式本地或全局函数,而不是halcon算子。确定的方法:注意该算子颜色然后去编辑参数选择查看该颜色代表的算子属于什么类型函数。亦可以直接右键,如果有查看函数。为黑色可点击,这种情况也是本地或全局函数。
解决方法:如果是全局函数,可以在halcon目录下面找到该函数,加载到新窗口就行;也可以新建输入输出一致的过程,将代码复制过来,然后使用。本地函数只能使用后一种方法解决。
11. 64位系统,VS2010及以下版本报error LNK1112:模块计算机类型”X86”与目标计算机类型”X64”冲突。
问题原因是默认情况,halcon在64位系统会自动安装64位halcondll,并且添加到环境变量;而vs一般是默认X86编译环境,俩者dll库不一致,换句话说是底层机器指令不一致。解决办法是将编译环境设置为64位,详见百度;或者再次安装halcon选择32位dll,并修改环境变量VC++路径为32位库路径,bin 指向32位dll路径。
12. 64位系统,VS2012 。无论怎么更改库文件,头文件,名空间,最好的提示也是找不到函数定义。
反复出现,无法解决时,有可能是问题11所述问题,解决办法见11.至于为何不提示error LNK1112,可能是VS更改了前面检测等级,在编译阶段就拦截到错误。应该说是更先进了,只是比较不合情理。
13. 如何查找halcon算子?
Halcon算子命名大部分所见即所得,也就是如果你记得你要找的算子汉字名称,输入到翻译器得到英文单词,在F1 的算子分栏从头开始输大部分能找到一些算子,这时候再点击进去注意算子功能解释,懂了是自己要的就拿起来到例程搜索示例,查阅功能;不懂就看说明部分;再不懂进群问。
另外,对于近半算子是按动作_类型/目标_属性命名。Obj是region,xld,image的父类,后三者找不到的算子可以输入obj查找。