1、halcon二次开发的两种方式
① 使用c#的语法方式逐句改写halcon代码
优点:各种变量的类型清楚,可读性强,改写后代码行数几乎不会增加多少。
缺点:改写工作量大,容易出错,如果halcon代码量大,后期将难以更新维护。
② 封装成函数导出 (推荐)
优点:操作简单,对开发人员编程能力要求低,工作量少,且便于维护。
缺点:halcon函数导出的代码可读性极低,一旦丢失原halcon文件,二次开发程序将难以更新维护。
建议:主二副一。
2、halcon联合c#开发必备的设置步骤(halcon 12 + visual studio 2013)
① 在项目“引用”中添加halcondotnet.dll。其一般路径如下:
c:program filesmvtechalcon-12.0indotnet35halcondotnet.dll
② 在“工具箱”的“选择项”中添加hwindowcontrol控件,这是halcon 12唯一提供的控件
③ 在用到halcon代码的类顶部添加using halcondotnet;
④ 在“属性”——“生成”中将目标平台由“any cpu”改为“x64”(计算机推荐使用64位系统)
⑤ 如果安装halcon时不是安装在默认路径,可能需要将halcon.dll文件复制到当前项目的输出路径下,halcon.dll的路径为:c:program filesmvtechalcon-12.0inx64-win64halcon.dll
3、halcon图形元素的显示
hwindowcontrol1.halconwindow.dispobj(image);//显示图像、region、xld
hwindowcontrol1.halconwindow.setdraw(margin);//设置填充的模式
hwindowcontrol1.halconwindow.setcolor(green);//设置显示颜色
4、系统全局参数设置(非必要,但建议设置)
hoperatorset.setsystem(do_low_error, false);//少报错
hoperatorset.setsystem(clip_region, false);//region在图像外不切掉
hoperatorset.setsystem(border_shape_models, true);//依然匹配边缘的图形
5、调试
c#中halcon部分代码的调试不太方便,但也不是毫无办法。
① 调试时htuple类型的变量可以直接查看值。
② image、region、xld的变量一般只能通过“保存文件到本地”来查看变量情况。
hoperatorset.writeimage(image, jpg, 0x000000, 1.jpg);//彩色图像
hoperatorset.writeimage(image, jpg, 0, 1.jpg);//灰度图像
hoperatorset.writeregion(ho_regionunion, 1.hobj);//后缀用.reg也行
hoperatorset.writecontourxlddxf(contours,1.dxf);
③ 安装halcon的变量检查插件到visual studio。该安装文件所在的默认路径为:
c:program filesmvtechalcon-12.0mischalcon_variable_inspect.vsix
6、在hwindowcontrol控件中显示文字
以下两个函数的内容由halcon中的set_display_font和disp_message算子导出,可完成控件中的文字显示。
set_display_font(windowhandle, hv_textsize, mono, true, false);
disp_message(windowhandle, hv_text, window, row, col, hv_color,true);
7、格式转换
① htuple兼容int、double等数据类型
② hobject类型的图像兼容himage类型的图像
③ bitmap转himage(24位或8位的)的方法如下:
public static himage bitmap2himage_24(bitmap bimage){ bitmap bimage24; bitmapdata bmdata = null; rectangle rect; intptr pbitmap; intptr ppixels; himage himage = new himage(); rect = new rectangle(0, 0, bimage.width, bimage.height); bimage24 = new bitmap(bimage.width, bimage.height, system.drawing.imaging.pixelformat.format24bpprgb); system.drawing.graphics g = system.drawing.graphics.fromimage(bimage24); g.drawimage(bimage, rect); g.dispose(); bmdata = bimage24.lockbits(rect, imagelockmode.readonly, system.drawing.imaging.pixelformat.format24bpprgb); pbitmap = bmdata.scan0; ppixels = pbitmap; himage.genimageinterleaved(ppixels, bgr, bimage.width, bimage.height, -1, byte, 0, 0, 0, 0, -1, 0); bimage24.unlockbits(bmdata); return himage;}public static himage bitmap2himage_8(bitmap bimage){ bitmap bimage8; bitmapdata bmdata = null; rectangle rect; intptr pbitmap; intptr ppixels; var himage = new himage(); rect = new rectangle(0, 0, bimage.width, bimage.height); bmdata = bimage.lockbits(rect, imagelockmode.readonly, pixelformat.format8bppindexed); pbitmap = bmdata.scan0; ppixels = pbitmap; himage.genimage1(byte, bimage.width, bimage.height, ppixels); bimage.unlockbits(bmdata); //formathimage = himage; return himage;}
8、在hwindowcontrol控件中缩放图像
在hwindowcontrol中鼠标位置可用getmposition获得,setpart可改变窗口中显示的图像部分。
hoperatorset.getmposition(hwhandle, out mousey, out mousex, out mbutton);
hoperatorset.setpart(hwhandle, mrow1, mcol1, mrow2, mcol2);
set_part:用于修改窗口中显示的图像部分。(row1,column1) 表示要显示的图像部分的左上角, (row2,column2)表示要显示的图像部分的右下角。(详见dev_set_part和set_part的帮助文档)
9、halcon图形元素与其他图像算法库数据的交互
halcon的region、xld是自己的特有格式,它们与外界是不通用的。目前我研究出来的主要是通过将坐标点作为桥梁来与外界进行数据交互。
region转化为坐标点:get_region_polygon(region : : tolerance : rows, columns)
坐标点转化为region:gen_region_polygon_filled( : region : rows, columns : )
xld转化为坐标点 :get_contour_xld(contour : : : row, col)
坐标点转化为xld :gen_contour_polygon_xld( : contour : row, col : )
来源:工控zero
Cavium推出基于定制核的多核系统级芯片
消息称小米11 Pro或将支持80W无线快充
H3C电子政务网络解决方案实现专网数据的共享
利用NVIDIA和浪潮信息AI计算平台读取医疗影像报告
华为mate10今晚正式发布:性能,外观,拍照续航与售价完全确认,比肩iPhone8
Halcon的C#二次开发及经验分享
2020年vivo游戏嘉年华来了!九大新游与四大赛事将引爆全场!
万事达卡将推出配套的AR应用 提升客户的沉浸式体验
2018 CES Asia:款式设计新颖的智能充电舱
盘点opgw和常见adss光缆区别
比亚迪在欧洲推出全交通行业方案
三星智能音箱曝光,触摸屏+360°旋转扬声器
汽车芯片紧张状况有望缓解 台积电将优先为老客户和长期客户供货
双通道硅光电二极管PCA4540助力工业4.0
力帆巨亏21.49亿,另辟蹊径开发氢能源汽车,也很难挽回颓势
RIGOL 隆重发布首款高性能射频信号源
铜排标准载流量的详细计算方式资料概述
苹果专利申请暴露出其在 AR眼镜上的计划,将会成为 iPhone专属配件?
长安汽车:阿维塔12上市72小时大定超1.1万辆,90后用户占比过半
工信部表示2019年将启动宽带网络双G双提同网同速行动