【《zw版·delphi与halcon系列原创教程》
zw版_zw中文增强版Halcon官方Delphi例程

源码下载:http://files.cnblogs.com/files/ziwang/zw_match.zip

2016 zw中文增强版(delph2007,HALCON 11.01)

主要改动之处:
:: 将位于窗口class的私有变量,改为全局变量,便于分析,修改
:: 增加大量中文注解
:: 将原版的批量自动测量,改为手动单幅测量,便于观测效果
:: 多处节点,增加图像文件输出,便于理解,观测运行效果

注意A点,这个是中文增强版,增加的单步多节点截图,可以清楚看到相关细节。

http:www.cnblogs.com/ziwang/
《zw版·Halcon-delphi系列原创教程》

--------------
全部源码如下

  1 unit zw_match;
  2 //
  3 // HALCON/Delphi pattern matching and measure example
  4 //
  5 // 2016 zw中文增强版(delph2007,HALCON 11.01)
  6 //
  7 // 主要改动之处:
  8 // :: 将位于窗口class的私有变量,改为全局变量,便于分析,修改
  9 // :: 增加大量中文注解
 10 // :: 将原版的批量自动测量,改为手动单幅测量,便于观测效果
 11 // :: 多处节点,增加图像文件输出,便于理解,观测运行效果
 12 // ::
 13 // ::
 14 //
 15 // http://www.cnblogs.com/ziwang/
 16 //《zw版·Halcon-delphi系列原创教程》
 17 //
 18
 19 interface
 20
 21 uses
 22 HALCONXLib_TLB,
 23 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 24 Dialogs, OleCtrls, StdCtrls, sMemo, ExtCtrls;
 25
 26 type
 27 Tmwin = class(TForm)
 28 HXCtrl: THWindowXCtrl;
 29 CopyrightLabel: TLabel;
 30 msg: TsMemo;
 31 Panel1: TPanel;
 32 CreateBtn: TButton;
 33 StartBtn: TButton;
 34 MatchingScoreLabel: TLabel;
 35 MatchingTimeLabel: TLabel;
 36 MatchingLabel: TLabel;
 37 MeasureDistLabel: TLabel;
 38 MeasureNumLabel: TLabel;
 39 MeasureTimeLabel: TLabel;
 40 MeasureLabel: TLabel;
 41 procedure FormShow(Sender: TObject);
 42 procedure FormCreate(Sender: TObject);
 43 procedure InitBtnClick(Sender: TObject);
 44 procedure FormDestroy(Sender: TObject);
 45 procedure CreateBtnClick(Sender: TObject);
 46 procedure StartBtnClick(Sender: TObject);
 47 private
 48 { Private declarations }
 49 public
 50 { Public declarations }
 51 end;
 52
 53 var
 54 mwin: Tmwin;
 55 xwin: HWindowX;
 56 Framegrabber: HFramegrabberX;
 57 Img, ImgReduced, ModelImage: HImageX;
 58 RectangleRegion, ModelRegion, ModelRegionTrans: HRegionX;
 59 Rectangle1, Rectangle2: HRegionX;
 60 ShapeModel: HShapeModelX;
 61 Matrix: HHomMat2DX;
 62 Tuple: HTupleX;
 63 Sys: HSystemX;
 64 Measure1, Measure2: HMeasureX;
 65 ImgWidth, ImgHeight: OleVariant;
 66 Row, Column, Area: OleVariant;
 67 Rect1Row, Rect1Col, Rect2Row, Rect2Col: Double;
 68 RectPhi, RectLength1, RectLength2: Double;
 69
 70 implementation
 71
 72 {$R *.dfm}
 73
 74 //------------------
 75 procedure initData();
 76 var dss:string;
 77 begin
 78 with mwin do begin
 79
 80 //--------------
 81 xwin.SetPart(0,0,491,645);//设置图像窗口尺寸
 82 Img := Framegrabber.GrabImage();//从输入图像系列,加载图像
 83 Img.DispObj(xwin);//显示图像
 84 Img.WriteImage('png',0,'tmp\ImgSr');
 85 //---------检测图像尺寸
 86 ImgWidth:=Img.GetImageSize(ImgHeight);
 87 dss:='pic wid,hei:'+VarToStr(ImgWidth)+','+VarToStr(ImgHeight);msg.Lines.Add(dss);msg.Lines.Add('');
 88 //---------
 89
 90 RectangleRegion.GenRectangle1(188,182,298,412);//设置检测区坐标(Row,Column,wid,hei)//??
 91 xwin.SetColor('red');//设置矩形颜色
 92 xwin.SetDraw('margin');//设置填充方式,margin,为边框模式,fill,为填充模式
 93 xwin.SetLineWidth(3);//设置笔画粗细
 94 RectangleRegion.DispObj(xwin);;//显示矩形box
 95 //--------------
 96 Area :=RectangleRegion.AreaCenter(Row,Column);//获取box区域面积,中心位置
 97 dss:='Row,Column : 188,182';msg.Lines.Add(dss);
 98 dss:='Row2,Column2 : 298,412';msg.Lines.Add(dss);
 99 dss:='box区域面积area : '+VarToStr(area);msg.Lines.Add(dss);
100 dss:='box区域大小wid,hei : '+VarToStr(412-182+1)+','+VarToStr(298-188+1);msg.Lines.Add(dss);
101 dss:='box区域中心位置Row,Column : '+VarToStr(Row)+','+VarToStr(Column);msg.Lines.Add(dss);
102 //-------- 设置加工区参数
103 Rect1Row := Row - 102;
104 Rect1Col := Column + 5;
105 Rect2Row := Row + 107;
106 Rect2Col := Column + 5;
107 RectPhi := 0;
108 RectLength1 := 170;
109 RectLength2 := 5;
110 end;
111 end;
112
113
114 procedure createShapeModel(); //创建加工模型 ShapeModel
115 begin
116 with mwin do begin
117 //----设置显示窗口参数
118 xwin.SetColor('red');xwin.SetDraw('margin');xwin.SetLineWidth(3);
119 RectangleRegion.DispObj(xwin);
120 //----设置model图像
121 ImgReduced := Img.ReduceDomain(RectangleRegion);
122 ModelImage := ImgReduced.InspectShapeModel(ModelRegion,1,30);
123 //ImgReduced.WriteImage('png',0,'tmp\ImgReduced');
124 //ModelImage.WriteImage('png',0,'tmp\ModelImage');
125 xwin.DumpWindow('png','tmp\xwin_Shape01');
126 //------------建立辅助区域
127 Rectangle1.GenRectangle2(Rect1Row,Rect1Col,RectPhi,RectLength1,RectLength2);
128 Rectangle2.GenRectangle2(Rect2Row,Rect2Col,RectPhi,RectLength1,RectLength2);
129 //------------创建模型 ShapeModel
130 ShapeModel.CreateShapeModel(ImgReduced,4,0,Tuple.TupleRad(360),
131 Tuple.TupleRad(1),'none','use_polarity',30,10);
132 //----设置显示窗口参数
133 xwin.SetColor('green');xwin.SetDraw('fill');
134 ModelRegion.DispObj(xwin);
135 xwin.DumpWindow('png','tmp\xwin_Shape02');
136 xwin.SetColor('blue'); xwin.SetDraw('margin');
137 Rectangle1.DispObj(xwin);Rectangle2.DispObj(xwin);
138 xwin.DumpWindow('png','tmp\xwin_Shape03');
139 end;
140 end;
141
142 procedure DoMeasurement;
143 var
144 S1, S2: Double;
145 RowCheck, ColumnCheck, AngleCheck, Score: OleVariant;
146 Rect1RowCheck, Rect1ColCheck, Rect2RowCheck, Rect2ColCheck: OleVariant;
147 RowEdgeFirst1, ColumnEdgeFirst1: OleVariant;
148 AmplitudeFirst1, RowEdgeSecond1: OleVariant;
149 ColumnEdgeSecond1, AmplitudeSecond1: OleVariant;
150 IntraDistance1, InterDistance1: OleVariant;
151 RowEdgeFirst2, ColumnEdgeFirst2: OleVariant;
152 AmplitudeFirst2, RowEdgeSecond2: OleVariant;
153 ColumnEdgeSecond2, AmplitudeSecond2: OleVariant;
154 IntraDistance2, InterDistance2: OleVariant;
155 MinDistance: OleVariant;
156 NumLeads: Longint;
157 dss:string;
158 begin
159 // 本demo,演示的是如何测量IC针脚间的距离
160 with mwin do begin
161 Sys.SetSystem('flush_graphic','false');//曲线系统图像自动刷新
162 Img := Framegrabber.GrabImage();//设置新图像
163 Img.Dispobj(xwin);//显示加工图像
164 //----注意,Mea00sr.png与 ImgSr.png的不同,旋转了一个角度
165 //----Framegrabber图像源是系列图片,通过旋转模拟加工现场,
166 //----每次调用GrabImage,会自动更新
167 xwin.DumpWindow('png','tmp\Mea00sr');
168 // Find the IC in the current image. 匹配模型
169 S1 := Sys.CountSeconds;
170 RowCheck := ShapeModel.FindShapeModel(Img,0,Tuple.TupleRad(360),0.7,1,0.5,
171 'least_squares',4,0.7,ColumnCheck,
172 AngleCheck,Score);
173 S2 := Sys.CountSeconds;
174 MatchingTimeLabel.Caption := Format('Time: %4.2f',[(S2-S1)*1000]);
175 MatchingScoreLabel.Caption := 'Score: ';
176 xwin.DumpWindow('png','tmp\Mea01');
177 //dss:=VarToStr(High(RowCheck));msg.lines.Add(dss);
178 //-----找到模型,开始测量
179 if not VarIsEmpty(RowCheck) and not VarIsArray(RowCheck) then begin
180 MatchingScoreLabel.Caption := Format('Score: %7.5f',[double(Score)]);
181 // Rotate the model for visualization purposes.旋转模型
182 Matrix.VectorAngleToRigid(Row,Column,0,RowCheck,ColumnCheck,AngleCheck);
183 ModelRegionTrans := ModelRegion.AffineTransRegion(Matrix,'false');
184 xwin.SetColor('green');xwin.SetDraw('fill');
185 ModelRegionTrans.DispObj(xwin);
186 xwin.DumpWindow('png','tmp\Mea02');
187 // Compute the parameters of the measurement rectangles.
188 Rect1RowCheck := Matrix.AffineTransPixel(Rect1Row,Rect1Col,Rect1ColCheck);
189 Rect2RowCheck := Matrix.AffineTransPixel(Rect2Row,Rect2Col,Rect2ColCheck);
190 // For visualization purposes, generate the two rectangles as regions and
191 // display them.
192 Rectangle1.GenRectangle2(Rect1RowCheck,Rect1ColCheck,RectPhi+AngleCheck,
193 RectLength1,RectLength2);
194 Rectangle2.GenRectangle2(Rect2RowCheck,Rect2ColCheck,RectPhi+AngleCheck,
195 RectLength1,RectLength2);
196 xwin.SetColor('blue');xwin.SetDraw('margin');
197 Rectangle1.DispObj(xwin);Rectangle2.DispObj(xwin);
198 xwin.DumpWindow('png','tmp\Mea03');
199 // Do the actual measurements.开始测量
200 S1 := Sys.CountSeconds;
201 Measure1.GenMeasureRectangle2(Rect1RowCheck,Rect1ColCheck,
202 RectPhi+AngleCheck,RectLength1,RectLength2,
203 ImgWidth,ImgHeight,'bilinear');
204 Measure2.GenMeasureRectangle2(Rect2RowCheck,Rect2ColCheck,
205 RectPhi+AngleCheck,RectLength1,RectLength2,
206 ImgWidth,ImgHeight,'bilinear');
207 RowEdgeFirst1 := Measure1.MeasurePairs(Img,2,90,'positive','all',
208 ColumnEdgeFirst1,AmplitudeFirst1,
209 RowEdgeSecond1,ColumnEdgeSecond1,
210 AmplitudeSecond1,IntraDistance1,
211 InterDistance1);
212 RowEdgeFirst2 := Measure2.MeasurePairs(Img,2,90,'positive','all',
213 ColumnEdgeFirst2,AmplitudeFirst2,
214 RowEdgeSecond2,ColumnEdgeSecond2,
215 AmplitudeSecond2,IntraDistance2,
216 InterDistance2);
217 S2 := Sys.CountSeconds;
218 MeasureTimeLabel.Caption := Format('Time: %4.2f',[(S2-S1)*1000]);
219 xwin.SetColor('red');
220 xwin.DispLine(Tuple.TupleSub(RowEdgeFirst1,Tuple.TupleMult(RectLength2,Cos(AngleCheck))),
221 Tuple.TupleSub(ColumnEdgeFirst1,Tuple.TupleMult(RectLength2,Sin(AngleCheck))),
222 Tuple.TupleAdd(RowEdgeFirst1,Tuple.TupleMult(RectLength2,Cos(AngleCheck))),
223 Tuple.TupleAdd(ColumnEdgeFirst1,Tuple.TupleMult(RectLength2,Sin(AngleCheck))));
224 xwin.DumpWindow('png','tmp\Mea041');
225 xwin.DispLine(Tuple.TupleSub(RowEdgeSecond1,Tuple.TupleMult(RectLength2,Cos(AngleCheck))),
226 Tuple.TupleSub(ColumnEdgeSecond1,Tuple.TupleMult(RectLength2,Sin(AngleCheck))),
227 Tuple.TupleAdd(RowEdgeSecond1,Tuple.TupleMult(RectLength2,Cos(AngleCheck))),
228 Tuple.TupleAdd(ColumnEdgeSecond1,Tuple.TupleMult(RectLength2,Sin(AngleCheck))));
229 xwin.DumpWindow('png','tmp\Mea042');
230 xwin.DispLine(Tuple.TupleSub(RowEdgeFirst2,Tuple.TupleMult(RectLength2,Cos(AngleCheck))),
231 Tuple.TupleSub(ColumnEdgeFirst2,Tuple.TupleMult(RectLength2,Sin(AngleCheck))),
232 Tuple.TupleAdd(RowEdgeFirst2,Tuple.TupleMult(RectLength2,Cos(AngleCheck))),
233 Tuple.TupleAdd(ColumnEdgeFirst2,Tuple.TupleMult(RectLength2,Sin(AngleCheck))));
234 xwin.DumpWindow('png','tmp\Mea043');
235 xwin.DispLine(Tuple.TupleSub(RowEdgeSecond2,Tuple.TupleMult(RectLength2,Cos(AngleCheck))),
236 Tuple.TupleSub(ColumnEdgeSecond2,Tuple.TupleMult(RectLength2,Sin(AngleCheck))),
237 Tuple.TupleAdd(RowEdgeSecond2,Tuple.TupleMult(RectLength2,Cos(AngleCheck))),
238 Tuple.TupleAdd(ColumnEdgeSecond2,Tuple.TupleMult(RectLength2,Sin(AngleCheck))));
239 xwin.DumpWindow('png','tmp\Mea044');
240 NumLeads := (Tuple.TupleLength(IntraDistance1)+Tuple.TupleLength(IntraDistance2));
241 MeasureNumLabel.Caption := Format('Number of leads: %2d',[NumLeads]);
242 MinDistance := Tuple.TupleMin(Tuple.TupleConcat(InterDistance1,InterDistance2));
243 MeasureDistLabel.Caption := Format('Minimum lead distance: %6.3f',[double(MinDistance)]);
244 end;
245 xwin.DumpWindow('png','tmp\Mea09');
246 end;
247 Sys.SetSystem('flush_graphic','true');
248 // Force the graphics window to be updated by displaying an empty circle.
249 xwin.DispCircle(-1,-1,0);
250 end;
251
252 //------------------
253
254 procedure Tmwin.FormCreate(Sender: TObject);
255 begin
256 Set8087CW($27f);//设置FPU浮点计算参数,一般很少见
257 HXCtrl.ControlInterface.QueryInterface(IID_IHWindowX,xwin);//设置Halcon控件接口
258 Framegrabber := CoHFramegrabberX.Create;//设置图像输入,文件或相机
259 ShapeModel := CoHShapeModelX.Create;//创建匹配模型变量
260 //---------------
261 RectangleRegion := CoHRegionX.Create;//建立一个矩形,作为检测区
262 Rectangle1 := CoHRegionX.Create;//建立辅助测区
263 Rectangle2 := CoHRegionX.Create;//建立辅助测区
264
265 Matrix := CoHHomMat2DX.Create;//建立 矩阵变量,用于传递模型参数
266 Tuple := CoHTupleX.Create;//建立 Tuple元组变量,用于传递模型参数
267 Sys := CoHSystemX.Create;//建立sys系统变量,修改系统设置
268 Measure1 := CoHMeasureX.Create;//建立检测变量
269 Measure2 := CoHMeasureX.Create;//建立检测变量
270 //--------------
271 msg.Clear;
272 //--------------
273 {274 OpenFramegrabber函数声明
275 变量Device:输入图像列表文件名,其他变量,一般采用默认参数
276 procedure OpenFramegrabber(Name:OleVariant; HorizontalResolution:OleVariant;
277 VerticalResolution:OleVariant; ImageWidth:OleVariant; ImageHeight:OleVariant;
278 StartRow:OleVariant; StartColumn:OleVariant; Field:OleVariant;
279 BitsPerChannel:OleVariant; ColorSpace:OleVariant; Generic:OleVariant;
280 ExternalTrigger:OleVariant; CameraType:OleVariant;
281 Device:OleVariant;
282 Port:OleVariant; LineIn:OleVariant; out AcqHandle:OleVariant);
283 }
284
285 Framegrabber.OpenFramegrabber('File',1,1,0,0,0,0,'default',-1,'default',
286 -1,'default','pic/board.seq','default',1,-1);
287 msg.Lines.Add('pic from : '+'pic/board.seq');msg.Lines.Add('');
288 //-------------
289
290
291 end;
292
293 procedure Tmwin.FormDestroy(Sender: TObject);
294 begin
295 FreeAndNil(HXCtrl);
296 // Framegrabber:=nil;ShapeModel:=nil; xwin:=nil;img:=nil;box:=nil;
297 end;
298
299 procedure Tmwin.FormShow(Sender: TObject);
300 begin
301 initData;
302 //-----
303 CreateBtn.Enabled := True;
304 StartBtn.Enabled := False;
305 end;
306
307 procedure Tmwin.InitBtnClick(Sender: TObject);
308 begin
309 initData;
310 end;
311
312
313 procedure Tmwin.StartBtnClick(Sender: TObject);
314 begin
315 DoMeasurement;
316 end;
317
318 procedure Tmwin.CreateBtnClick(Sender: TObject);
319 begin
320 createShapeModel();
321 StartBtn.Enabled :=true;
322 end;
323
324 end.

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

转载于:https://www.cnblogs.com/ziwang/p/4854412.html

zw版_zw中文增强版Halcon官方Delphi例程相关推荐

  1. 教你DIY中文增强版Geexbox,且安装为硬盘版

    [url]http://hi.baidu.com/dekiny/blog/item/10421bced025433ab700c8c7.html[/url] [url]http://geexbox.or ...

  2. qBittorrent下载|qBittorrent绿色中文增强版32/64位下载 v4.1.7

    点击下载来源:qBittorrent下载|qBittorrent绿色中文增强版32/64位下载 v4.1.7 qBittorrent是一个基于Qt工具箱和libtorrent-rasterbar并用C ...

  3. Redmine中文增强版 - 支持任务标签功能

    (右键在新标签中打开)  -  www.redmine.org.cn   -  Redmine中文增强版 支持任务标签功能,每个任务界面可以选择标签,也可以为整个项目定义标签: 请进入免费在线测试环境 ...

  4. radan7破解版|radan7中文破解版|2018最新版

    radan7破解版2018最新版是一款由GSSI公司专为Radan开发的地质雷达数据后处理软件.采用最新3D模块化设计, 用户可根据自身专业需求可选择合适的RADAN处理功能.RADAN基于微软视窗系 ...

  5. Pro是专业版,Lite是精简版,Plus是增强版

    Pro是专业版 Lite是精简版 Plus是增强版

  6. 精通CSS:高级Web标准解决方案(第2版)中文扫描版电子书pdf下载

    精通CSS:高级Web标准解决方案(第2版)中文扫描版电子书pdf下载链接: https://pan.baidu.com/s/15NcNlcFgCP23sE3XAM_2_A 提取码获取方式:关注下面微 ...

  7. googlehelper手机版ios_nba2K17中文手机版下载_nba2K17官方中文IOS手机版V1.07下载

    nba2K17官方中文安卓手机版是一款充满着趣味性的体育竞技类游戏,由PC端改编而来,有着生涯和传奇模式供玩家选择体验!玩家可以在游戏中尽情得体验到充满着激情的篮球比赛所带来的独特游戏魅力,喜欢的玩家 ...

  8. moldflow2019破解版|moldflow2019中文破解版下载(附激活工具+安装教程)

    点击下载:moldflow2019中文破解版 moldflow2019是Autodesk公司全新推出的2019新版本,专业用户注塑成型的仿真工具,帮助制造商预测.优化和验证塑料零件.注射模具和成型工艺 ...

  9. painter2018破解版|painter2018中文破解版下载

    点击下载出处:painter 2018破解版 喜欢绘画的用户一定有许多好用的绘画工具,但是在电脑上画画,你会用什么工具呢?小编我今天就向大家推荐一款非常不错电脑画图工具painter,它可以配合手写板 ...

最新文章

  1. Linux命令行–更多bash shell命令(转)
  2. Ubuntu 无界面使用selenium chrome + headless
  3. 大二发SCI!这位985大学学霸,获MIT博士全奖!
  4. vue 分享微信传参_vue 中使用微信分享接口(简单实用)
  5. [css] 怎么让div中的图片和文字同时上下居中?
  6. win和linux生成的密文不一样,AES加密解密Windows下跟linux下结果不同的解决方案
  7. python学习笔记(3)---cookie session
  8. 计算机的标准输入法,ALKATIP输入法电脑版
  9. 萤火虫小程序_成都以北2h的森林小镇!养在深闺的萤火虫、穿行山间的火车,在这露营解锁夏天的小秘密...
  10. 9008v android操作系统 电量,三星N9008V (GALAXY Note 3 移动4G Android 4.4)救砖教程 救砖包 刷回官方系统支持OTA升级...
  11. Flutter 安卓 Platform 与 Dart 端消息通信方式 Channel 源码解析
  12. 用C语言编译一元二次方程的求解,用c语言求解一元二次方程
  13. Oracle删除数据非常慢
  14. vue项目创建之后 ESLint导致第一行毛毛虫
  15. pentaho-server 与 Pentaho Data Integration(pentaho-kettle)
  16. 地理配准之栅格至栅格
  17. win business_使用Business iQ进行实时业务监控
  18. 石头扫地机器人加速异响_【石头扫地机器人】日常保养 tips
  19. 【云原生 | 36】Docker快速部署主流脚本语言JavaScript
  20. 2005年通信热点载录

热门文章

  1. 实习程序员工资2.5K,公司团建还要自己掏钱:领导以为你爱吃泡面
  2. 无限滑动的banner图,中间显示大图两边显示一部分,无限滚动
  3. 实现文本超出显示省略号
  4. java中的深复制和浅复制
  5. AVFoundation 零碎知识
  6. jquery cookie 本地不能工作的原因
  7. apache运行CGI程序的配置
  8. excel html id,excel.html
  9. 大数据平台基本功能有哪些
  10. 物联网卡11位和13位号码的区别在于哪