0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Halcon的C#二次開發(fā)及經(jīng)驗分享

新機(jī)器視覺 ? 來源:工控Zero ? 2023-06-27 14:51 ? 次閱讀

1、Halcon二次開發(fā)的兩種方式

① 使用C#的語法方式逐句改寫Halcon代碼

優(yōu)點(diǎn):各種變量的類型清楚,可讀性強(qiáng),改寫后代碼行數(shù)幾乎不會增加多少。

缺點(diǎn):改寫工作量大,容易出錯,如果Halcon代碼量大,后期將難以更新維護(hù)。

② 封裝成函數(shù)導(dǎo)出(推薦

優(yōu)點(diǎn):操作簡單,對開發(fā)人員編程能力要求低,工作量少,且便于維護(hù)。

缺點(diǎn):Halcon函數(shù)導(dǎo)出的代碼可讀性極低,一旦丟失原Halcon文件,二次開發(fā)程序?qū)㈦y以更新維護(hù)。

建議:主二副一。

2、Halcon聯(lián)合C#開發(fā)必備的設(shè)置步驟(Halcon 12 + Visual studio 2013)

① 在項目“引用”中添加halcondotnet.dll。其一般路徑如下:

C:Program FilesMVTecHALCON-12.0indotnet35halcondotnet.dll

② 在“工具箱”的“選擇項”中添加hWindowControl控件,這是Halcon 12唯一提供的控件

③ 在用到Halcon代碼的類頂部添加using HalconDotNet;

④ 在“屬性”——“生成”中將目標(biāo)平臺由“Any CPU”改為“x64”(計算機(jī)推薦使用64位系統(tǒng))

⑤ 如果安裝Halcon時不是安裝在默認(rèn)路徑,可能需要將halcon.dll文件復(fù)制到當(dāng)前項目的輸出路徑下,halcon.dll的路徑為:C:Program FilesMVTecHALCON-12.0inx64-win64halcon.dll

3、Halcon圖形元素的顯示

hWindowControl1.HalconWindow.DispObj(image);//顯示圖像、Region、Xld

hWindowControl1.HalconWindow.SetDraw("margin");//設(shè)置填充的模式

hWindowControl1.HalconWindow.SetColor("green");//設(shè)置顯示顏色

4、系統(tǒng)全局參數(shù)設(shè)置(非必要,但建議設(shè)置)

HOperatorSet.SetSystem("do_low_error","false");//少報錯

HOperatorSet.SetSystem("clip_region","false");//region在圖像外不切掉

HOperatorSet.SetSystem("border_shape_models","true");//依然匹配邊緣的圖形

5、調(diào)試

C#中Halcon部分代碼的調(diào)試不太方便,但也不是毫無辦法。

① 調(diào)試時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。該安裝文件所在的默認(rèn)路徑為:

C:Program FilesMVTecHALCON-12.0miscHALCON_Variable_Inspect.vsix

6、在hWindowControl控件中顯示文字

以下兩個函數(shù)的內(nèi)容由Halcon中的set_display_font和disp_message算子導(dǎo)出,可完成控件中的文字顯示。

set_display_font(windowHandle,hv_TextSize,"mono","true","false");

disp_message(windowHandle,hv_Text,"window",row,col,hv_Color,"true");

7、格式轉(zhuǎn)換

① HTuple兼容int、double等數(shù)據(jù)類型

② HObject類型的圖像兼容HImage類型的圖像

③ Bitmap轉(zhuǎn)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中鼠標(biāo)位置可用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圖形元素與其他圖像算法庫數(shù)據(jù)的交互

Halcon的Region、Xld是自己的特有格式,它們與外界是不通用的。目前我研究出來的主要是通過將坐標(biāo)點(diǎn)作為橋梁來與外界進(jìn)行數(shù)據(jù)交互。

Region轉(zhuǎn)化為坐標(biāo)點(diǎn):get_region_polygon(Region: :Tolerance:Rows,Columns)

坐標(biāo)點(diǎn)轉(zhuǎn)化為Region:gen_region_polygon_filled( :Region:Rows,Columns: )

Xld轉(zhuǎn)化為坐標(biāo)點(diǎn) :get_contour_xld(Contour: : :Row,Col)

坐標(biāo)點(diǎn)轉(zhuǎn)化為Xld :gen_contour_polygon_xld( :Contour:Row,Col: )

來源:工控Zero

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7360

    瀏覽量

    87632
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4277

    瀏覽量

    62323
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4722

    瀏覽量

    68229
  • HALCON
    +關(guān)注

    關(guān)注

    16

    文章

    63

    瀏覽量

    27166

原文標(biāo)題:Halcon的C#二次開發(fā)及經(jīng)驗分享

文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    短信貓二次開發(fā)專家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中間件數(shù)據(jù)庫接口

    短信貓二次開發(fā)專家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中間件數(shù)據(jù)庫接口短信貓JAVA短信接口 JAVA短信控件 JAVA短信貓二次開發(fā)包金笛技術(shù)JAVA短信接口 JAVA短信
    發(fā)表于 11-26 14:01

    [轉(zhuǎn)帖]短信貓二次開發(fā)專家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中間件數(shù)據(jù)庫接口

    短信貓二次開發(fā)專家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中間件數(shù)據(jù)庫接口短信貓JAVA短信接口 JAVA短信控件 JAVA短信貓二次開發(fā)包金笛技術(shù)JAVA短信接口 JAVA短信
    發(fā)表于 11-26 20:09

    短信貓二次開發(fā)專家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中間件數(shù)據(jù)庫接口)

    短信貓二次開發(fā)專家(DELPHI/ASP/PB/VB/VC/C#/JAVA/ 中間件數(shù)據(jù)庫接口)短信貓JAVA短信接口 JAVA短信控件 JAVA短信貓二次開發(fā)包金笛技術(shù)JAVA短信接口 JAVA
    發(fā)表于 01-10 16:35

    CAXA2011二次開發(fā),CRX; CAX2007二次開發(fā)

    CAXA2011二次開發(fā),CRX; CAX2007二次開發(fā),EBA QQ:46841341 電話:*** 何生 標(biāo)題、明細(xì)、自動參數(shù)化產(chǎn)生圖紙,PDM、PLM集成系統(tǒng),面積、重量、各種個性化程序
    發(fā)表于 01-05 23:05

    手機(jī)模塊二次開發(fā)

    手機(jī)的wifi模塊、4g/3g通信模塊、藍(lán)牙模塊等固有模塊,在進(jìn)行二次開發(fā)時,需不需要對硬件本身進(jìn)行改造?或者是二次開發(fā)普遍都需要對硬件改造還是普遍都不需要對硬件改造??
    發(fā)表于 06-29 11:49

    地面站二次開發(fā)服務(wù)

    Mission Planner二次開發(fā):基于MP地面站源碼,進(jìn)行功能刪減、增加等;深度定制化地面站:基于MP地面站進(jìn)行UI全新設(shè)計,功能增減,企業(yè)Logo定制;基于Mavlink協(xié)議地面站定制開發(fā)
    發(fā)表于 06-19 15:52

    面向?qū)ο蟮膮?shù)化CAD二次開發(fā)方法研究

    【摘要】通用CAD系統(tǒng)采用開放式結(jié)構(gòu)體系,提供相應(yīng)的二次開發(fā)手段和方法。研究了面向?qū)ο蟮膮?shù)化二次開發(fā)技術(shù)及方法,以期為CAD的二次開發(fā)提供指導(dǎo),并以Pro/Engineer為軟件
    發(fā)表于 03-19 21:37 ?34次下載

    AutoCAD的二次開發(fā)

    AutoCAD的二次開發(fā) AutoCAD的二次開發(fā)主要涉及以下內(nèi)容:(1) 編寫各種用戶自定義函數(shù)并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL
    發(fā)表于 02-14 16:59 ?1795次閱讀

    ANSYS的二次開發(fā)技術(shù)

    ANSYS的二次開發(fā)技術(shù) ANSYS提供的二次開發(fā)工具有三個:參數(shù)化設(shè)計語言(ANSYS Parametric Design Language,APDL),用戶界面設(shè)計語言(User Interface
    發(fā)表于 10-02 10:42 ?2033次閱讀

    基于VC的Cadence二次開發(fā)

    文中研究了用VC對Cadence做二次開發(fā),使用VC編寫操作界面,通過VC與SKILL語言通信,實現(xiàn)了VC界面對Cadence軟件的控制,完成特定操作,給出了實現(xiàn)的代碼。
    發(fā)表于 10-19 14:38 ?41次下載
    基于VC的Cadence<b class='flag-5'>二次開發(fā)</b>

    AutoCAD VBA二次開發(fā)教程

    AutoCAD VBA二次開發(fā)教程,學(xué)習(xí)二次開發(fā)的頂起
    發(fā)表于 11-02 16:16 ?0次下載

    二次開發(fā)串口通信協(xié)議

    lobot機(jī)器人二次開發(fā)
    發(fā)表于 05-09 08:55 ?7次下載

    對功率計進(jìn)行二次開發(fā)

    功率計做二次開發(fā)首先要確認(rèn)的就是通訊的接口,ZLG致遠(yuǎn)電子PA300系列功率計提供USB、GPIB、以太網(wǎng)以及串口接口,4種接口免費(fèi)標(biāo)配,都可以用于二次開發(fā)。
    的頭像 發(fā)表于 04-29 15:12 ?2986次閱讀

    LTE模塊A7600C1-MNSE二次開發(fā)硬件設(shè)計手冊

    LTE模塊A7600C1-MNSE二次開發(fā)硬件設(shè)計手冊
    發(fā)表于 08-12 15:31 ?12次下載

    空間光調(diào)制器的簡便控制方法:靈活應(yīng)用二次開發(fā)

    01.什么是二次開發(fā)模式? 二次開發(fā)模式實際上就是一組指令集,不同于一個有窗口的軟件,這組指令集更像一根管道,管道的一端可以和任意編程軟件對接,管道的另外一頭就可以將結(jié)果展現(xiàn)在特定設(shè)備上,管道完成
    的頭像 發(fā)表于 05-11 13:37 ?589次閱讀
    空間光調(diào)制器的簡便控制方法:靈活應(yīng)用<b class='flag-5'>二次開發(fā)</b>