这个问题已经在这里有一个答案:
- OpenCV的另一幅图像上寻找图像cordinates 3个回答
我是新来emgu,想从哪里开始一些建议。
我已经通过形状检测看了,但其过于复杂的东西,我需要..我想..和我的surfexample不工作。 我得到这个错误:
无法取得在EMGU.CV SURF例如工作?
无论如何,这是我想做些什么:查找图像B.形象的图像A是一个简单的方形,它总是有相同的灰色1个像素的边界,总是相同的尺寸(我认为),但内部颜色可能为黑色或的约7其他颜色(只有永远纯色)之一。 我需要找到图像A的图像b的坐标当我按下一个按钮。 看到下面的图片。
图像B
和
形象的
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;
你可以看看http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html这可能是你在找什么。 你的黑方将成为模板。 您可以尝试还包括它周围的灰一点点。 这将使探测器从fireing大黑色区域。