不管读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差别。什么缘由引发?
答:初步诊断是,显示的时候调用的颜色查找表存在异常不是 default ,而是其它选项。此时能够经过查阅相关参数,调用set_system解决,也能够 在 编辑-》参数选择-》颜色查找表进行更改 。 windows
裁剪图像;从图像上截取某段图像进行保存。如何实现该操做 ?
答:首先应该知道,region不具备单独构成图像的要素,他没有灰度值。有用过opencv的应该知道 ROI(感兴趣区域),设置好它后,对图像的大部分操做就转为 图像的一个矩形区域内进行。相似的,halcon有domain 概念。 首先 设置好一个矩形区,而后使用 reduce_domain(是一个矩形区域)后,再使用crop_domain 就裁剪出图像。 数组
读入bmp,或tiff 图像 显示 该图不是bmp文件或不能读。缘由是什么?
答:这个常有新手询问,画图,图像管理器都能打开,又或者是相机采集完直接存到硬盘。Halcon 读取图像 在windows下面到最后是调用windows库函数 实现读图功能。咱不清楚究竟是怎么调用的。对于图像格式,在读图函数F1说明很细。基本 bmp 若是 文件头不是bw仍是bm(百度百科bmp格式查找,编写此处时无网络,后续可能忘记),就读不进来 。其余规格欢迎补充。解决办法,若是是相机采集,就在内存直接转换(参见 halcon到VC.pdf 里面的 halcon和bitmap互转);若是是采完的图片,大部分经过画图工具转换为 24位bmp格式,便可解决。、 网络
读入avi文件报错。
答:Halcon 经过 directshow或另外一个格式解析视频,正常来讲应该能够读入市面大部分视频,实际测试发现只能读入最标准的avi文件格式。若是须要临时处理,须要下格式工厂等工具转化为最标准的avi文件格式(论坛叶诺有发帖说明)。 多线程
Region 或 xld 筛选 。
答:Halcon提供了丰富的region 和xld筛选方法。Region可使用select_shape_xld,选择出符合要求的区域,若是 不能知足还能够经过 相似 region feature 这样关键字组合成的算子获取区域特征,而后经过 tuple 排序或相加减,再经过 tuple_find 肯定是对应哪一个区域的特征。一样的halcon也提供了 select_contours_xld 进行轮廓筛选 。 dom
Halcon分几类对象,每一个类的功用是?
答:Halcon总分俩大类,tuple和图标对象obj 。Tuple涵盖了对 全部基础数据类型的封装,能够理解为她是halcon定义的数组类。Obj 是alcon定义图标类基类。衍生出了许多类型,其中 Region ,Xld,Image 其中最主要的类型。 函数
F1说明,参数部分 -array 是什么意思?
答:该符号说明,该参数接受一组输入,对tuple就是一组tuple,对obj 就是经过concat_obj或其它操做产生的一组obj元组。 工具
俩个相对方形物体的距离计算。
答:若是这俩个物体和背景对比清晰,最近的距离在俩条边下则能够再预处理以后进行以下操做:
1.Segement_contours_xld 分割边缘线段(edgeXXXX等获得的边缘);
2.select_contours_xld 选择出特定的长度或方向边缘;
3.假设此时恰好获取俩条线 ,则能够利用 distance_ll ,求得 距离,也能够本身fit_lineXXXX 拟合直线再求距离;
以上是一种方法,另外一种常见方法是利用 measure_pos 或measure_pair 进行测量,不熟悉的能够翻看示例或者使用 测量助手进行测量 。 测试
建立过程或函数,或者全文编辑。
答:在算子编辑窗口,main所在行右边,有四个按钮,将鼠标移到该位置,将有中文提示,按提示点击按钮。 ui
从其它halcon环境窗口复制函数或算子 复制 到新建的halcon窗口,没法使用,提示不识别。
答:除了敲错,此种状况都是因为该函数式本地或全局函数,而不是halcon算子。肯定的方法:注意该算子颜色而后去 编辑 参数选择 查看该颜色表明的算子属于什么类型函数。亦能够直接右键,若是有查看函数。为黑色可点击,这种状况也是本地或全局函数。
解决方法:若是是全局函数,能够在halcon目录下面找到该函数,加载到新窗口就行;也能够新建输入输出一致的过程,将代码复制过来,而后使用。本地函数只能使用后一种方法解决。 编码
64位系统,VS2010及如下版本 报 error LNK1112:模块计算机类型”X86” 与目标计算机类型”X64” 冲突 。
答:问题缘由是默认状况,halcon在64位系统会自动安装64位halcondll,而且添加到环境变量;而vs通常是默认X86编译环境,俩者dll库不一致,换句话说是底层机器指令不一致。解决办法是 将编译环境设置为64位,详见百度 ;或者再次安装halcon选择32位dll,并修改环境变量 VC++路径为32位库路径,bin 指向32位dll 路径。
64位系统,VS2012 。不管怎么更改库文件,头文件,名空间,最好的提示也是找不到函数定义。
答:反复出现,没法解决时,有多是 问题11所述问题,解决办法见11.至于为什么不提示error LNK1112,多是VS更改了前面检测等级,在编译阶段就拦截到错误。应该说是更先进了,只是比较不合情理。
如何查找halcon算子?
答:Halcon算子命名大部分所见即所得,也就是若是你记得你要找的算子汉字名称,输入到翻译器获得英文单词,在F1 的算子分栏 从头开始输大部分能找到一些算子,这时候再点击进去注意算子功能解释,懂了是本身要的就拿起来到例程搜索示例,查阅功能;不懂就看说明部分;再不懂进群问。
另外 ,对于近半算子是 按 动做_类型/目标_属性 命名。 Obj 是 region,xld,image的父类,后三者找不到的算子能够输入 obj查找 。
Halcon 相等,不等于,异或,或等操做符。
答:直接在F1 出来的分栏 输入 operation ,查找可得。
在halcon环境 使用 get_grayval 进行像素操做太慢 ,如何加速?
答:注意到halcon环境是解释执行,get_grayval 能够一次获取多个,能够预先把行数据存入一个tuple对象,存一次之后可用屡次。所以提速方法,建议事先建立好行tuple (用tuple_add 加一,便可实现全部行加一),列的tuple 数组 (建立好能够用屡次) 。这时每次再调用get_grayval ,速度将显著提高,由于节省了逐行解释时间 。注意:若是导出到VC,则建议用get_image_pointer 获取指针进行操做 。
从一组region或xld,image中获取单个对象,或多个halcon同类对象构成
-array 元组。
答:select_obj负责从 多个对象的元组选出指定序号对象;concat_obj执行将俩个对象(或元组)连接成一个对象元组。
更改halcon颜色查找表,显示不一样颜色空间 。
答:在编辑 参数选择 颜色查找表进行更改;也能够在F1输入lut进行查找设置函数。
建立空对象 ,空Region ,空数组。
答:gen_empty_obj 建立空的对象;gen_emtpy_region 建立空数组;halcon环境中tuple 用 :=[] 。
Region和xld 互相转化 ;多边形建立xld;直方图,直线,点集,多边形,行程编码建立region 。
答:Halcon里对象之间的相互转换,通常能够转化为gen_目标对象_源对象 形式 。如:gen_region_contour_xld 使用xld建立一个region ;gen_contour_region_xld 从区域region建立一个轮廓xld 。直方图histo;直线是line,点集是points,行程编码runs,黑森线hline,多边形polygon 。按照上面格式进行查找 。
Halcon伪彩色
答:能够参照冈萨雷斯伪彩色 章节 。
Halcon角度分布
判断Region 是否为空 ?
答:首先通常region是多个region存在一个regions 变量里面 。因此 先使用count_obj 得到有多少个 obj;而后使用 select_obj ,选出一个区域处理;接着使用 area_center ,VC可使用 region.Id()!=H_EMPTY_REGION 判断是否为空 。
用halcon调用halcon支持的品牌相机,使用相机自带的厂家软件 能够发现相机,但是halcon老是提示:图像获取设备未初始化。这是为何?
答:把对应品牌的相机配置文件加到采集助手的,使当前halcon调用的相机参数与厂家软件一致;再确保 相机驱动,采集卡驱动安装完毕。
屏幕/窗口截图 。
答:使用dump_window_image 保存对应窗口截图,截图为当前肉眼所见图像,包括已经绘制到图像上的region,xld等。
导出halcon 11 代码为C++ 代码,常常提示不识别 ,或者 名空间名字没找到 。解决办法 是什么?
答:首先 halcon11 导出若是没有勾选10 ,默认产生的C++代码,对应的主要头文件是 HalconCPP.h 和 using namespace HalconCPP 。
配置以下 头文件 #include “HalconCPP.h” ,代码在导出时已经自动生成 。
using namespace HalconCPP; 代码导出时已经自动生成 。
在VC++目录 ,配置include路径 ,一个是 默认Halcon安装文件夹下面的include ,另一个根据你导出的代码而定,上面是 halconCPP ,因此对应添加 include文件夹下面的 HalconCPP文件夹到路径里面 。
此外配置 将安装文件夹下的lib添加到 库文件 目录 。
最后将 HalconCPP.lib添加到 库的 依赖项。注意此处要一句导出代码而定,上述导出的是halcon -C++代码 ,因此是 此处添加该项。
标定助手的 “平均偏差”是指什么 ?
答: 这个平均偏差的计算是按以下方式:
1.计算标定板图像的 标志点位置,此处记为Mark1 ;
2.标定结束后,将标准标志点 ,按照得出的转换矩阵,进行转换获得Mark2;
3.因为能够获得Mark1 和 Mark2 点之间对应关系,点对应相减 ,绝对值累加(此处累加方式请具体查标定程序查找具体平均偏差计算函数,好久,已记忆不详) ,而后除以 标志点数目 。
4.此时获得的就是平均偏差 。
Halcon参数函数里面的四个冒号 (::::)是什么意思?
答:四个冒号按照参数类型和输入输出不一样进行了分隔 。 从左到右依次是 (输入的obj对象 : 输出的obkj对象 : 输入的控制变量 : 输出的控制变量 ) 。
Halcon F1 算子 Parameters 格式说明 。
答:例1:Image1 (input_object) (multichannel-)image(-array) → object (byte* / int1* / int2* / uint2* / int4* / int8 / real*) *allowed for compute devices
Input image 1.
Image1 对应参数名 input_object 指示对象参数类型 是输入对象
(multichannel-) 指示是能够是多通道图像 image 指示 参数是一个 image类型
(-array) 指示能够一次输入多个 object(……) 指示输入的是object,其中支持的object参数的内部类型如(……)所示 。
例2: Mult (input_control) number → (real / integer)
参数名(参数类型) 具体类型->(支持内部参数类型)
多线程调用代码,代码中包含halcon窗口代码 ,报错。
答:Halcon涉及到窗口的代码都不能跨线程调用,硬是跨线程调用可能出现参数输入错误等异常状况。参见函数 F1 说明 的 Parallelization 并行性 说明 。最好的办法是 当前窗口当前线程声明,定义并使用,其它线程能够对MFC的picturebox 控件进行关联(不一样线程调用该代码稳定性待测试),而后不一样线程本身定义变量进行具体操做。
region或者xld绘制或画到图像上用哪一个函数?
答:Halcon绘制有paint和overpaint,区别是overpaint是绘制自身,paint输出能够是其余图像。
绘制region:paint_region 绘制xld: paint_xld 。
线触发,软触发,外触发
答:软触发:顾名思义就是到达设定的采集条件时,经过软件设置触发采集;
线触发:也称外触发,是利用相机自带触发线,在到达设定的采集条件时,触发相机采集,线的信号一般是由其余设备如:红外传感器,探测到目标物体出如今预约位置,就进行采集
编写程序过程当中,程序崩溃,环境保存路径 。(待验证) 答: 对于windows系统,路径是 C:\Documents and Settings\login\Local Settings\Temp\hdevelop. 其中login为登陆的系统用户名 。 注意1: 在win xp 下测试 ,在调试程序过程当中未发现临时文本 。因此待验证 。 注意2:win7要求版本为11.0.1以后 ,以前版本存在bug 。