halcon算子支持各種編程語言,但是最終都是調用halcon.dll中的函數,題主主要使用c#語言,就說下halcon在c#中的那些事吧,
舉例說明,對於條碼,halcon的htool接口下提供了HBarCode模型類,不少人是在halcon開發環境中導出算子並沒有直接使用這個模型,使用格式如下
HOperatorSet.FindBarCode(findImage,out obj, Handle, CodeType, out codeResult);
其中的handle是一個htuple,實際是HBarCode模型的句柄,程序寫到這里調試估計都沒問題了,接下來該保存數據了,這里直接保存這個handle沒用,可以使WriteBarCodeModel來講模型保存到文件中.或者用Serialize算子存到數據流中統一保存,
以上兩種方式都需要單獨編寫程序來保存數據,由於c#提供方便的序列化方式,可以將類直接序列化,這就大大減少了自己編寫保存程序出現的bug,還可以將整個工程文件保存為一個序列化對象,具體應該怎么做呢?
聲明對象時候,工具字段 必須直接使用
HBarCode barCodeTool = new HBarCode();
這種方式來聲明,這樣就序列化時候會自動調用模型的序列化算子,使用時候面向對象和面向過程都可以,
HOperatorSet.FindBarCode(findImage,out obj, barCodeTool.Handle, CodeType, out codeResult); barCodeRegion = barCodeTool.FindBarCode(findImage, CodeType, out codeResult);
建議還是使用第二種面向對象的編程方式,這樣更簡潔.是region就聲明hregion,是image就聲明himage,不要全都弄成hobject,c#的強制類型會幫我們檢查出一些低級錯誤,
想想c#所有對象都聲明為object會怎樣吧
ps:himage在這里用完要記得及時dispose,不然內存刷刷刷的漲