【《zw版·Halcon与delphi系列原创教程》Halcon图层与常用绘图函数

时间:2021-09-17 15:45:38

【《zw版·Halcon与delphi系列原创教程》
Halcon图层与常用绘图函数

Halcon的绘图函数,与传统编程vb、c、delphi语言完全不同,
     传统编程语言,甚至cad,绘图都是直接采用line、circle函数。
     Halcon,作为专业的图像处理系统,采用的是类似ps的图层、蒙版,并导入了domain(领域)的概念。

【《zw版·Halcon与delphi系列原创教程》Halcon图层与常用绘图函数

【《zw版·Halcon与delphi系列原创教程》Halcon图层与常用绘图函数

这样设计,非常专业,高效,当然,也比较复杂。
      实际图像工程中,往往是结合THImagex、THWindowX(通过THOperatorSetX控件)一起使用。
      此外,Halcon图像体系当中,line、circle、point,点、线、圆、矩形等等,这些基本绘图要素,都是类似对象(class、object)的模式,需要先生成,再disp到THWindowX绘图窗口。
     第三点,Halcon的line、circle、point对象变量,保存的是绘图单元object,最基本的元数据,例如:坐标、尺寸,而颜色,线条粗细,往往在实际生成时,再决定。
     因此,同一个object,在程序不同的地方,最终的颜色,效果是有所不同的,例如:

参见以下源码:

cir:=THRegionX.create(nil);
cir.genCircle(200,200,100); xwin.SetLineWidth(8);xwin.SetColor('blue');
cir.DispObj(xwin);
cimg:=xwin.DumpWindowImage;cimg.WriteImage('png',0,'tmp\w01.png'); xwin.SetLineWidth(2);xwin.SetColor('red');
cir.DispObj(xwin);
cimg:=xwin.DumpWindowImage;cimg.WriteImage('png',0,'tmp\w02.png');

  【《zw版·Halcon与delphi系列原创教程》Halcon图层与常用绘图函数

【《zw版·Halcon与delphi系列原创教程》Halcon图层与常用绘图函数

同样一个cir对象,同样的位置,因为先后的笔画粗细、颜色不同,而最终表现不同。

第4点,Halcon的line、circle、point等基本绘图语句,颜色。笔画等参数,由THWindowX决定,类似全局变量,而不是绘图语句本身。
       第5点,最终的绘图效果,需要用THWindowX控件的DumpWindowImage、或DumpWindow函数,合并到一个IHImageX类型的图像变量,类似ps的合并可见图层,再保存到图像文件,或者转换成其他图像格式,进行后续处理。
       注意,变量类型必须是IHImageX类型,THImageX、IHUntypedObjectX;类型都不行
       这点很奇怪,Halcon脚本自身,是无需定义变量的,类似python,而二次开发,对于变量的匹配非常严格,象这里,会有OleVariant、Variant也不能通用;
       变量类型,自动匹配、容错匹配,是现代编程语言的趋势,而Halcon,在二次开发接口当中,依然采用严格的强类型匹配,除了德国人的严谨外,可能因为图像系统的复杂性,和第三方开发时的种种不确定因素。

【《zw版·delphi与halcon系列原创教程》,网址,cnblogs.com/ziwang/】