我是emgu的新手,想要从哪里开始。
我已经查看了形状检测,但它太复杂了我所需要的......我想..而且我的例子不起作用。我收到这个错误:
Cannot get SURF example in EMGU.CV to work?
无论如何,这就是我想要做的事情:在图像B中找到图像A.图像A是一个简单的正方形,总是具有相同的灰色1像素边框,并且总是相同的尺寸(我相信)但内部颜色可以是黑色或其他约7种颜色之一(只有纯色)。当我按下按钮时,我需要在图像b中找到图像A的坐标。见下图。
图片 B
和
图片 A
答案 0 :(得分:22)
Goosebumps
回答是正确的,但我认为一些代码也可能有用。这是我使用MatchTemplate
检测源图像(图像B)内的模板(图像A)的代码。正如Goosebumps
所指出的那样,您可能希望在模板周围添加一些灰色。
Image<Bgr, byte> source = new Image<Bgr, byte>(filepathB); // Image B
Image<Bgr, byte> template = new Image<Bgr, byte>(filepathA); // Image A
Image<Bgr, byte> imageToShow = source.Copy();
using (Image<Gray, float> result = source.MatchTemplate(template, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED))
{
double[] minValues, maxValues;
Point[] minLocations, maxLocations;
result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);
// You can try different values of the threshold. I guess somewhere between 0.75 and 0.95 would be good.
if (maxValues[0] > 0.9)
{
// This is a match. Do something with it, for example draw a rectangle around it.
Rectangle match = new Rectangle(maxLocations[0], template.Size);
imageToShow.Draw(match, new Bgr(Color.Red), 3);
}
}
// Show imageToShow in an ImageBox (here assumed to be called imageBox1)
imageBox1.Image = imageToShow;
答案 1 :(得分:3)
你可以查看http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html 这可能就是你要找的东西。你的黑色方块将是模板。您可以尝试在其周围加一点灰色。这样可以防止探测器在大的黑色区域发射。