我正在尝试制作一个彩色对象跟踪器,它使用二进制图像和斑点检测器来跟踪目标类型: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。我只是得到一个黑色的图像。
答案 0 :(得分:2)
通常,此类应用程序的彩色斑点检测部分按照以下方式工作:
一些旨在找到绿色物体(色调~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();
}
}