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

审核编辑:汤梓红


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

    关注

    19

    文章

    6649

    浏览量

    84522
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61308
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66766
  • HALCON
    +关注

    关注

    16

    文章

    63

    浏览量

    27002

原文标题: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

    电话方案二次开发

    该电话方案提供了功能强大的自主协议接口,可供其他公司进行二次开发。详情请见附件。
    发表于 09-28 16:58

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

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

    protel 99 se 二次开发

    哪位大神会protel 99 se的 二次开发?提供些例子啊,谢谢!
    发表于 09-25 16:48

    基于labview使用dll对仪器的二次开发

    在论坛潜水一年多了,看到各位大神们的经典作品,都会在线下仔细琢磨,最近老板布置任务,要求用labview对一个波形发生器做二次开发,厂家说明里面有dll文件,希望大家推荐一本关于用labview调用dl对仪器二次开发的书籍,自己苦思良久也没个主意,先谢谢啦~l
    发表于 07-05 16:44

    手机模块二次开发

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

    手环二次开发

    深圳市云石智能科技开发有限公司主营健康穿戴手环(心率温度血压手环)与定位采集基站二次定制开发SDK,应用多种项目,有需要手环二次开发请联系QQ:3072853807,电话:0755-2
    发表于 09-25 17:05

    有人做过打标机的二次开发吗?

    使用LABview做的,我问了好多家做打标机的都不支持二次开发
    发表于 12-18 17:23

    地面站二次开发服务

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

    NIRScan Nano二次开发教程

    你好, 我购买了NIRScan Nano,想自己开发Windows软件,所以需要贵司提供二次开发包及教程,请发链接或邮箱。 邮箱:support@linax.cn  Jason 非常感谢
    发表于 06-21 00:28

    求指导naze32二次开发

    有人做个naze32二次开发吗?求指导一下。谢谢
    发表于 05-15 06:36

    请问SIM800C EAT都有二次开发的资料吗?

    请问各位大牛,SIM800C EAT都有二次开发的资料吗?
    发表于 06-17 04:35

    请问ALIENTEK的GUI能提供二次开发吗?

    开发指南中的综合实验提到了:GUI(ALIENTEK 编写,非ucGUI)想问下,如果买你们的板子,可以基于你们的GUI二次开发吗?也就是有没有API以供客户二次开发呢?谢谢!
    发表于 10-15 03:21