【问题标题】:EmguCV Tracker implementation in C#EmguCV Tracker 在 C# 中的实现
【发布时间】:2018-08-08 09:07:05
【问题描述】:

寻找示例代码以了解如何实现 EmguCV 跟踪器。我在这个写得很糟糕的代码中尝试了一些东西:

class ObjectTracker
{
Emgu.CV.Tracking.TrackerCSRT tracker = new Emgu.CV.Tracking.TrackerCSRT();
bool isActive = false;
public bool trackerActive = false;
public void Track(Bitmap pic, Rectangle selection,out Rectangle bound)
{   
    Rectangle result = new Rectangle();
    Bitmap bitmap=pic; //This is your bitmap
    Emgu.CV.Image<Bgr, Byte> imageCV = new Emgu.CV.Image<Bgr, byte>(bitmap); //Image Class from Emgu.CV
    Emgu.CV.Mat mat = imageCV.Mat; //This is your Image converted to Mat

    if (tracker.Init(mat,selection))
    {
        while (tracker.Update(mat, out bound))
        {
           result = bound;
        }
    }
    bound = result;     
} 

我知道几乎没有逻辑缺陷,但我仍然无法在不同的尝试中得到任何结果。

谢谢!

【问题讨论】:

    标签: c# .net image emgucv


    【解决方案1】:

    事实证明,这真的很简单。

    首先定义一个你想要的类型的跟踪器。

    例子:

    Emgu.CV.Tracking.TrackerCSRT Tracker= new Emgu.CV.Tracking.TrackerCSRT();
    

    然后在扫描选定区域(RoI)之前你需要初始化跟踪器

    例子:

    Tracker.Initimage, roi);
    

    重要提示:图片必须为 Emgu.CV.Mat 、roi Drawing.Rectangle 类型。 要将您的位图转换为 Mat,您可以使用以下方法:

    例子:

    public Emgu.CV.Mat  toMat(Bitmap pic)
    {
    Bitmap bitmap=pic; 
    Emgu.CV.Image<Bgr, Byte> imageCV = new Emgu.CV.Image<Bgr, byte>(bitmap); 
    Emgu.CV.Mat mat = imageCV.Mat; 
    return mat;
    }
    

    注意:此代码属于 stackoverflow 中的其他人,我忘记了源代码。感谢他/她。

    最后使用以下语句将返回包围被跟踪对象的矩形。技巧是对象不返回 Rectangle 作为方法输出,而是通过 out 语句返回。

    tracker.Update(image, out roi);
    

    最后说明:如果有人知道如何提高性能或多线程这种方法,请发表评论。

    祝你有美好的一天!

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多