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
審核編輯:湯梓紅
-
計算機(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)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論