RM新时代网站-首页

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

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

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

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

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

② 封裝成函數導出(推薦

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

缺點:Halcon函數導出的代碼可讀性極低,一旦丟失原Halcon文件,二次開發(fā)程序將難以更新維護。

建議:主二副一。

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

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

C:Program FilesMVTecHALCON-12.0indotnet35halcondotnet.dll

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

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

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

⑤ 如果安裝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、系統(tǒng)全局參數設置(非必要,但建議設置)

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

審核編輯:湯梓紅


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

    關注

    19

    文章

    7488

    瀏覽量

    87849
  • 函數
    +關注

    關注

    3

    文章

    4327

    瀏覽量

    62569
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68521
  • HALCON
    +關注

    關注

    16

    文章

    64

    瀏覽量

    27208

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

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

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

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

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

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

    面向對象的參數化CAD二次開發(fā)方法研究

    【摘要】通用CAD系統(tǒng)采用開放式結構體系,提供相應的二次開發(fā)手段和方法。研究了面向對象的參數化二次開發(fā)技術及方法,以期為CAD的二次開發(fā)提供指導,并以Pro/Engineer為軟件
    發(fā)表于 03-19 21:37 ?34次下載

    AutoCAD的二次開發(fā)

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

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

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

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

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

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

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

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

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

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

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

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

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

    SOLIDWORKS二次開發(fā)應用范圍與實例

    SOLIDWORKS二次開發(fā)為企業(yè)和設計師們提供了廣闊的定制化空間,能夠更好地滿足復雜多變的設計需求,幫助工程師和設計師提高工作效率,實現更復雜的自動化任務。如您有SOLIDWORKS二次開發(fā)需求,歡迎咨詢Solidkits
    的頭像 發(fā)表于 12-13 16:33 ?135次閱讀
    RM新时代网站-首页