Halcon的C 二次開發及經驗分享

2021-09-22 19:33:26 字數 4370 閱讀 9512

1、halcon二次開發的兩種方式

① 使用c#的語法方式逐句改寫halcon**

優點:各種變數的型別清楚,可讀性強,改寫後**行數幾乎不會增加多少。

缺點:改寫工作量大,容易出錯,如果halcon**量大,後期將難以更新維護。

② 封裝成函式匯出 (推薦)

優點:操作簡單,對開發人員程式設計能力要求低,工作量少,且便於維護。

缺點:halcon函式匯出的**可讀性極低,一旦丟失原halcon檔案,二次開發程式將難以更新維護。

建議:主二副一。

2、halcon聯合c#開發必備的設定步驟(halcon 12 + visual studio 2013)

① 在專案「引用」中新增halcondotnet.dll。其一般路徑如下:

c:\program files\mvtec\halcon-12.0\bin\dotnet35\halcondotnet.dll

② 在「工具箱」的「選擇項」中新增hwindowcontrol控制項,這是halcon 12唯一提供的控制項

③ 在用到halcon**的類頂部新增using halcondotnet;

④ 在「屬性」——「生成」中將目標平台由「any cpu」改為「x64」(計算機推薦使用64位系統)

⑤ 如果安裝halcon時不是安裝在預設路徑,可能需要將halcon.dll檔案複製到當前專案的輸出路徑下,halcon.dll的路徑為:c:\program files\mvtec\halcon-12.0\bin\x64-win64\halcon.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 files\mvtec\halcon-12.0\misc\halcon_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位的)的方法如下:

1 public static himage bitmap2himage_24(bitmap bimage)

2

1 public static himage bitmap2himage_8(bitmap bimage)

2

8、在hwindowcontrol控制項中縮放影象

在hwindowcontrol中滑鼠位置可用getmposition獲得,setpart可改變視窗中顯示的影象部分。

hoperatorset.getmposition(hwhandle,out mousey,out mou***,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 : )

postek二次開發 POSTEK二次開發介面

例項簡介 例項截圖 核心 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using ...

mcms二次開發 YzmCMS二次開發手冊

摘要 yzmcms是採用mvc設計模式開發,基於模組和操作的方式進行訪問,採用單一入口模式進行專案部署和訪問,無論訪問任何乙個模組或者功能,只有一.yzmcms是採用mvc設計模式開發,基於模組和操作的方式進行訪問,採用單一入口模式進行專案部署和訪問,無論訪問任何乙個模組或者功能,只有乙個統一的入口...

mcms二次開發 YzmCMS二次開發手冊

yzmcms是採用mvc設計模式開發,基於模組和操作的方式進行訪問,採用單一入口模式進行專案部署和訪問,無論訪問任何乙個模組或者功能,只有乙個統一的入口。一 基本目錄結構.根目錄 cache 快取目錄 必須可寫入 common 全站公共目錄 必須可寫入 uploads 預設上傳目錄 必須可寫入 yz...