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,不然内存刷刷刷的涨