Halcon纠错方法总结,机器视觉Halcon常见错误解决办法

Halcon纠错方法总结(建议收藏)

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 到里面的 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.至于为何不提示 errorLNK1112,可能是 VS更改了前面检测等级,在编译阶段就拦截到错误。应该说是更先进了,只是比较不合情理。

13.如何查找 halcon算子?
Halcon 算子命名大部分所见即所得,也就是如果你记得你要找的算子汉字名称,输入到翻译器得到英文单词,在 F1的算子分栏从头开始输大部分能找到一些算子,这时候再点击进去注意算子功能解释,懂了是自己要的就拿起来到例程搜索示例,查阅功能;不懂就看说明部分;再不懂进群问。另外,对于近半算子是按动作 _类型/目标_属性命名。 Obj 是 region,xld,image 的父类,后三者找不到的算子可以输入 obj 查找。

14. Halcon相等,不等于,异或,或等操作符。直接在 F1出来的分栏输入 operation,查找可得。

15.在 halcon 环境使用 get_grayval进行像素操作太慢,如何加速?
注意到 halcon 环境是解释执行, get_grayval可以一次获取多个,可以预先把行数据存入一个 tuple 对象,存一次以后可用多次。因此提速方法,建议事先创建好行 tuple (用 tuple_add 加一,即可实现所有行加一 ),列的 tuple 数组(创建好可以用多次 )。这时每次再调用 get_grayval,速度将显着提升,因为节省了逐行解释时间。注意:如果导出到 VC,则建议用 get_image_pointer 获取指针进行操作。

16.从一组 region 或 xld,image 中获取单个对象,或多个 halcon 同类对象构成-array 元组。
select_obj 负责从多个对象的元组选出指定序号对象; concat_obj 执行将俩个对象(或元组)链接成一个对象元组。

17.更改 halcon 颜色查找表,显示不同颜色空间。
在编辑参数选择颜色查找表进行更改;也可以在 F1输入 lut 进行查找设置函数。

18.创建空对象,空 Region,空数组。
gen_empty_obj 创建空的对象; gen_emtpy_region 创建空数组; halcon环境中 tuple 用:=[]。

19. Region和 xld 互相转化;多边形创建 xld;直方图,直线,点 集,多边形,行程编码创建 region。Halcon 里对象之间的相互转换,一般可以转化为 gen_目标对象 _源对象形式。如:
gen_region_contour_xld 使用 xld 创建一个 region;
gen_contour_region_xld 从区域 region 创建一个轮廓 xld。
直方图 histo;直线是 line,点集是 points,行程编码 runs,黑森线 hline,
多边形 polygon。
按照上面格式进行查找。

20. Halcon伪彩色可以参照冈萨雷斯伪彩色章节。

22. Halcon角度分布

23. 判断 Region是否为空?
首先一般 region 是多个 region 存在一个 regions变量里面。所以先使用count_obj 获得有多少个 obj;然后使用 select_obj,选出一个区域处理;接着使用area_center,VC可以使()!=H_EMPTY_REGION 判断是否为空。

23.新手入门书籍?
首推《机器视觉算法与应用》,这本书前面更多的是阐述一些通用的机器
视觉经验,后面有跟示例,代码为,实际使用可能会有部分函数已经被抛弃使用;其次,冈萨雷斯绿皮书《数字图像处理》,介绍内容丰富,全面,但是可能讲得比较深,没有实际实践或再找资料展开会比较,常读不深入。是数字图像处理基础理论不可多得的书籍。

24.用 halcon 调用
halcon 支持的品牌相机,使用相机自带的厂家软件可以发现相机,可是halcon 总是提示:图像获取设备未初始化。这是为什么?把对应品牌的相机配置文件加到采集助手的使当前 halcon 调用的相机参数与厂家软件一致;再确保相机驱动,采集卡驱动安装完毕。

25.屏幕/窗口截图。
使用 dump_window_image 保存对应窗口截图,截图为当前肉眼所见图像,包括已经绘制到图像上的 region,xld 等。

26.导出 halcon 11代码为 C++代码,经常提示不识别,或者名空间名字没找到。解决办法是什么?
首先 halcon11导出如果没有勾选 10,默认产生的 C++代码,对应的主要头文件是和 using namespace HalconCPP 。配置如下头文件 #include “” , 代码在导出时已经自动生成。using namespace HalconCPP; 代码导出时已经自动生成。在 VC++目录,配置include 路径,一个是默认 Halcon安装文件夹下面的 include,另外一个根据你导出的代码而定,上面是 halconCPP,所以对应添加 include 文件夹下面的HalconCPP文件夹到路径里面。此外配置将安装文件夹下的 lib 添加到库文件目录。最后将添加到库的依赖项。注意此处要一句导出代码而定,上述导出的是halcon -C++代码,所以是此处添加该项。

27.标定助手的 “平均误差 ”是指什么?
这个平均误差的计算是按如下方式:
1.计算标定板图像的标志点位置,此处记为 Mark1;
2.标定结束后,将标准标志点,按照得出的转换矩阵,进行转换得到
Mark2;
3.由于可以得到 Mark1 和 Mark2 点之间对应关系,点对应相减,绝对值累加(此处累加方式请具体查标定程序查找具体平均误差计算函数,很久,已记忆不详),然后除以标志点数目。
4.此时得到的就是平均误差。

28. Halcon参数函数里面的四个冒号 (::::)是什么意思?
四个冒号按照参数类型和输入输出不同进行了分隔。从左到右依次是 (输入的 obj 对象:输出的 obkj 对象:输入的控制变量:输出的控制变量 )。

29. HalconF1算子 Parameters格式说明。

建议收藏哦!

猜你喜欢

转载自blog.csdn.net/m0_65636467/article/details/130889418