private void CmdProcess_Click(object sender, EventArgs e) { int Min_PosX = 0, Min_PosY = 0, Max_PosX = 0, Max_PosY = 0; BitmapData SrcBmpData = SrcBmp.LockBits(new Rectangle(0, 0, SrcBmp.Width, SrcBmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); BitmapData DstBmpData = DstBmp.LockBits(new Rectangle(0, 0, DstBmp.Width, DstBmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); Stopwatch Sw = new Stopwatch(); Sw.Start(); SrcImg = new TMatrix(SrcBmp.Width, SrcBmp.Height, SrcBmpData.Stride, (int)IP_DEPTH.IP_DEPTH_8U, 3, (byte *)SrcBmpData.Scan0); DestImg = new TMatrix(DstBmp.Width, DstBmp.Height, DstBmpData.Stride, (int)IP_DEPTH.IP_DEPTH_8U, 3, (byte *)DstBmpData.Scan0); TMatrix *Dest = null; MatchTemplate(ref DestImg, ref SrcImg, ref Dest); MinMaxLoc(ref *Dest, ref Min_PosX, ref Min_PosY, ref Max_PosX, ref Max_PosY); IP_FreeMatrix(&Dest); SrcBmp.UnlockBits(SrcBmpData); DstBmp.UnlockBits(DstBmpData); Pen P = new Pen(Color.Red); Graphics G = Graphics.FromImage(DstBmp); G.DrawRectangle(P, new Rectangle(Min_PosX, Min_PosY, SrcImg.Width, SrcImg.Height)); P.Dispose(); G.Dispose(); LblInfo.Text = "Image size: " + PicSrc.Image.Width.ToString() + " X " + PicSrc.Image.Height.ToString() + "\nAlgorithm processing time " + Sw.ElapsedMilliseconds.ToString() + " ms"; PicDest.Refresh(); }
private static extern IP_RET MatchTemplate(ref TMatrix Src, ref TMatrix Template, ref TMatrix *Dest);