c# - 使用 EMGUcv 进行颜色跟踪

标签 c# video-processing emgucv video-tracking

我正在尝试制作一个彩色对象跟踪器,它使用二进制图像和 Blob 检测器来跟踪目标,如下所示:https://www.youtube.com/watch?v=9qky6g8NRmI .但是我不知道 ThresholdBinary() 方法是如何工作的,甚至不知道它是否正确。

这是一段相关的代码:

cam._SmoothGaussian(3);

blobDetector.Update(cam);
Image<Bgr,byte> binaryImage = cam.ThresholdBinary(new Bgr(145,0,145),new Bgr(0,0,0));
Image<Gray,byte> binaryImageGray = binaryImage.Conver<Gray,byte>();

blobTracker.Process(cam, binaryImageGray);

foreach (MCvBlob blob in blobTracker)
{
   cam.Draw((Rectangle)blob, new Bgr(0,0,255),2);
}

当我显示 binaryImage 时,我什至没有得到 Blob 。我只得到一个黑色图像。

最佳答案

通常,此类应用程序的彩色 Blob 检测部分按照以下方式工作:

  1. 将图像转换为 HSV (色调、饱和度、值)色彩空间。
  2. 用接近目标值的色相值过滤所有像素的色相 channel 。阈值处理通常会为您提供值高于低于 阈值的所有像素。您对某个目标值附近的像素感兴趣。
  3. 进一步过滤获得的蒙版,可能使用饱和度/值 channel 或通过移除小 Blob 。理想情况下,只保留目标 blob。

一些旨在寻找绿色物体(色调~50)的示例代码,例如视频中显示的绿球:

// 1. Convert the image to HSV
using (Image<Hsv, byte> hsv = original.Convert<Hsv, byte>())
{
    // 2. Obtain the 3 channels (hue, saturation and value) that compose the HSV image
    Image<Gray, byte>[] channels = hsv.Split(); 

    try
    {
        // 3. Remove all pixels from the hue channel that are not in the range [40, 60]
        CvInvoke.cvInRangeS(channels[0], new Gray(40).MCvScalar, new Gray(60).MCvScalar, channels[0]);

        // 4. Display the result
        imageBox1.Image = channels[0];
    }
    finally
    {
        channels[1].Dispose();
        channels[2].Dispose();
    }
}

关于c# - 使用 EMGUcv 进行颜色跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24018650/

相关文章:

c# - 无法将数据从c#插入到mysql数据库

c# - ORA-01008: 并非所有变量都绑定(bind)。他们被束缚

ffmpeg - 使用 ffmpeg 垂直或水平堆叠(马赛克)多个视频?

xcode - 使用 Handbrake CLI 进行视频到图像序列

c# - 在 C# 中,有效的返回值在接收器中变为 null

c# - 如何在没有任何迁移的情况下强制使用新种子

algorithm - 如何找到图像处理算法的计算复杂度

c# - 命名参数规范必须在指定所有固定参数之后出现

c# - 使用模板匹配时获取匹配百分比值

c# - 无法通过C#使用EmguCV打开mpg文件进行捕获