1 Halcon的C#二次开发及经验分享-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Halcon的C#二次开发及经验分享

新机器视觉 来源:工控Zero 2023-06-27 14:51 次阅读

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,outmouseY,outmouseX,outmbutton);

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

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7488

    浏览量

    87846
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62567
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68516
  • HALCON
    +关注

    关注

    16

    文章

    64

    浏览量

    27208

原文标题:Halcon的C#二次开发及经验分享

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    短信猫二次开发专家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中间件数据库接口

    短信猫二次开发专家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中间件数据库接口短信猫JAVA短信接口 JAVA短信控件 JAVA短信猫二次开发包金笛技术JAVA短信接口 JAVA短信
    发表于 11-26 14:01

    [转帖]短信猫二次开发专家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中间件数据库接口

    短信猫二次开发专家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中间件数据库接口短信猫JAVA短信接口 JAVA短信控件 JAVA短信猫二次开发包金笛技术JAVA短信接口 JAVA短信
    发表于 11-26 20:09

    短信猫二次开发专家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中间件数据库接口)

    短信猫二次开发专家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中间件数据库接口)短信猫JAVA短信接口 JAVA短信控件 JAVA短信猫二次开发包金笛技术JAVA短信接口 JAVA
    发表于 01-10 16:35

    CAXA2011二次开发,CRX; CAX2007二次开发

    CAXA2011二次开发,CRX; CAX2007二次开发,EBA QQ:46841341 电话:*** 何生 标题、明细、自动参数化产生图纸,PDM、PLM集成系统,面积、重量、各种个性化程序
    发表于 01-05 23:05

    手机模块二次开发

    手机的wifi模块、4g/3g通信模块、蓝牙模块等固有模块,在进行二次开发时,需不需要对硬件本身进行改造?或者是二次开发普遍都需要对硬件改造还是普遍都不需要对硬件改造??
    发表于 06-29 11:49

    地面站二次开发服务

    Mission Planner二次开发:基于MP地面站源码,进行功能删减、增加等;深度定制化地面站:基于MP地面站进行UI全新设计,功能增减,企业Logo定制;基于Mavlink协议地面站定制开发
    发表于 06-19 15:52

    面向对象的参数化CAD二次开发方法研究

    【摘要】通用CAD系统采用开放式结构体系,提供相应的二次开发手段和方法。研究了面向对象的参数化二次开发技术及方法,以期为CAD的二次开发提供指导,并以Pro/Engineer为软件
    发表于 03-19 21:37 34次下载

    AutoCAD的二次开发

    AutoCAD的二次开发 AutoCAD的二次开发主要涉及以下内容:(1) 编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL
    发表于 02-14 16:59 1817次阅读

    ANSYS的二次开发技术

    ANSYS的二次开发技术 ANSYS提供的二次开发工具有三个:参数化设计语言(ANSYS Parametric Design Language,APDL),用户界面设计语言(User Interface
    发表于 10-02 10:42 2046次阅读

    基于VC的Cadence二次开发

    文中研究了用VC对Cadence做二次开发,使用VC编写操作界面,通过VC与SKILL语言通信,实现了VC界面对Cadence软件的控制,完成特定操作,给出了实现的代码。
    发表于 10-19 14:38 41次下载
    基于VC的Cadence<b class='flag-5'>二次开发</b>

    AutoCAD VBA二次开发教程

    AutoCAD VBA二次开发教程,学习二次开发的顶起
    发表于 11-02 16:16 0次下载

    二次开发串口通信协议

    lobot机器人二次开发
    发表于 05-09 08:55 7次下载

    对功率计进行二次开发

    功率计做二次开发首先要确认的就是通讯的接口,ZLG致远电子PA300系列功率计提供USB、GPIB、以太网以及串口接口,4种接口免费标配,都可以用于二次开发
    的头像 发表于 04-29 15:12 3050次阅读

    LTE模块A7600C1-MNSE二次开发硬件设计手册

    LTE模块A7600C1-MNSE二次开发硬件设计手册
    发表于 08-12 15:31 12次下载

    SOLIDWORKS二次开发应用范围与实例

    SOLIDWORKS二次开发为企业和设计师们提供了广阔的定制化空间,能够更好地满足复杂多变的设计需求,帮助工程师和设计师提高工作效率,实现更复杂的自动化任务。如您有SOLIDWORKS二次开发需求,欢迎咨询Solidkits
    的头像 发表于 12-13 16:33 126次阅读