OpenCvSharp 学习二 : 目标跟踪

使用OpenCvSharp实现目标跟踪:

    首先需要有两张图像. 一张为目标物体的图像(object) 别一张是含有这个目标物体的图像(Image). 使用Cv.MatchTemplate()方法在图像中去寻找目标物体 . 得到"一张图" 是一张结果图.这个图并不是简单意义上的图像. 而是寻找的结果. 如果图像的大小为W & H 目标图像的大小为w & h 那个这张结果图的大小为 (W - w + 1) & (H - h + 1).

    最后. 我们使用CV.MinMaxLoc() 方法 . 得到这个结果的左上角的CvPoint与右下角的CvPoint . 这样,我们就可以用这两个数据来做一些有意思的事情

  

View Code
 1 using System;
2 using OpenCvSharp;
3
4 class Program
5 {
6 static void Main()
7 {
8 using (CvCapture cap = CvCapture.FromCamera(0))
9 using (CvWindow win = new CvWindow("CVS231"))
10 {
11 while (Cv.WaitKey(10) < 0) {
12 using (IplImage src = cap.QueryFrame()) // 源图像
13 {
14 src.Flip(src,FlipMode.Y);
15
16 using (IplImage tpl = IplImage.FromFile("speedlimit55.jpg",LoadMode.Color)) // 目标图像
17 using (IplImage res = new IplImage(new CvSize(src.Width - tpl.Width + 1, // 结果"图像"
18 src.Height - tpl.Height + 1),
19 BitDepth.F32,1))
20 {
21 CvPoint minloc , maxloc;
22 // 使用这个方法 得到查找的结果图
23 Cv.MatchTemplate(src,tpl,res,MatchTemplateMethod.CCoeff);
24 // 得到结果中的左上角与右下角
25 Cv.MinMaxLoc(res,out minloc,out maxloc);
26 // 我们 主要 使用的是结果的左上角. 然后使用这个左上角 + 目标图像的大小
27 Cv.Rectangle(src,minloc,new CvPoint(minloc.X + tpl.Width,minloc.Y + tpl.Height),new CvColor(0,255,0),2);
28
29 win.Image = src;
30 }
31 }
32 }
33 }
34 }
35 }

运行结果:

原文地址:https://www.cnblogs.com/easyfrog/p/2358431.html