|
p; Change := false; for i := 0 to FeatureCount - 1 do begin if Features[i].Index = 1 then for j := i + 1 to FeatureCount - 1 do begin Features[j - 1] := Features[j]; Change := true; end; if Change then break; end; if Change then Dec(FeatureCount); until not Change; setlength(Features, FeatureCount); {删除失去的特征点} Speed := 0; Radio := 0; RadioX := 0; RadioY := 0; if FeatureCount > 0 then begin SupportCount := 0; for i := 0 to FeatureCount - 1 do if (Features[i].Vector.X <> 0) and (Features[i].Vector.Y <> 0) then begin RadioX := RadioX + Features[i].Vector.X; RadioY := RadioY + Features[i].Vector.Y; Speed := Speed + sqrt(sqr(Features[i].Vector.X) + sqr(Features[i].Vector.Y)); Inc(SupportCount); end; if SupportCount > 0 then begin Speed := Speed / SupportCount; //*0.0352778; Radio := ArcTan2(RadioY, RadioX); end; end; {计算平均速度和整体方向} Frame.Canvas.Pen.Style := psSolid; Frame.Canvas.Pen.Width := 1; Frame.Canvas.Pen.Color := clLime; Frame.Canvas.Brush.Style := bsClear; for i := 0 to FeatureCount - 1 do Frame.Canvas.Ellipse(Features[i].Info.X - 4, Features[i].Info.Y - 4, Features[i].Info.X + 4, Features[i].Info.Y + 4); {用绿圈标识特征点} Frame.Canvas.Pen.Color := clYellow; for i := 0 to FeatureCount - 1 do begin Frame.Canvas.MoveTo(Features[i].Info.X - Features[i].Vector.X, Features[i].Info.Y - Features[i].Vector.Y); Frame.Canvas.LineTo(Features[i].Info.X, Features[i].Info.Y); end; {用黄色线条表示运动向量} if (SupportCount > 0) and (Speed > 3) then begin Frame.Canvas.Pen.Style := psSolid; Frame.Canvas.Pen.Width := 6; Frame.Canvas.Pen.Color := clWhite; Frame.Canvas.Ellipse(Width div 2 - 100, Height div 2 - 100, Width div 2 + 100, Height div 2 + 100); Frame.Canvas.MoveTo(Width div 2, Height div 2); Frame.Canvas.Pen.Color := clBlue; Frame.Canvas.LineTo(Width div 2 + trunc(90 * Cos(Radio)), Height div 2 + trunc(90 * Sin(Radio))); Frame.Canvas.Pen.Style := psClear; Frame.Canvas.Brush.Style := bsSolid; Frame.Canvas.Brush.Color := clRed; Frame.Canvas.Ellipse(Width div 2 + trunc(90 * Cos(Radio)) - 8, Height div 2 + trunc(90 * Sin(Radio)) - 8, Width div 2 + trunc(90 * Cos(Radio)) + 8, Height div 2 + trunc(90 * Sin(Radio)) + 8); end; end; destructor TOpticalFlowLK.Destroy; begin setlength(ImageOld, 0); setlength(ImageNew, 0); setlength(ImageGray, 0); setlength(Eigenvalues, 0); setlength(dx, 0); setlength(dy, 0); setlength(dxy, 0); setlength(WBPoint, 0); inherited; end; end.
上一页 [1] [2] [3] [系统软件]InstallShield Express for delphi制作安装程序定… [常用软件]InstallShield Express制作Delphi数据库安装程序 [Delphi程序]为什么选择Delphi.Net ? [Delphi程序]《关于VisiBroker For Delphi的使用》(4) [Delphi程序]Delphi 程序员代码编写标准指南 [Delphi程序]转贴:Conversion to Delphi 6: Missing unit Pro… [Delphi程序]Borland Delphi 9 的新特性 [Delphi程序]Delphi 键盘码表 [Delphi程序]Chuck Jazdzewski的离开意味着Delphi的终结吗? [Delphi程序]Delphi Access violations 问题的解决之道
|