我是图像处理领域的新手,我正试图在EmguCV的帮助下制作多个模板匹配的应用程序。在Form1上,我有: -一个imageBox(来自EmguCV的pictureBox),在这里我从摄像机接收图像(实时); -调用“多个模板匹配功能”的按钮。 我设法从imageBox1的相机中获取图像,现在我正努力使用该模板匹配功能。我在here上找到了一些帮助,但是我不知道为什么该代码不起作用(消息框不会弹出)。我对代码进行了一些更改以适合我的情况,并得到了这样的代码:
private void ProcessFrame(object sender, EventArgs e)
{
frame = _capture.QueryFrame();
if (can_process)
{
Image<Bgr, byte> source = frame;
if (!Directory.Exists(saoi_templatesPath))
throw new Exception($"Directory was not found: '{saoi_templatesPath}'");
Parallel.ForEach(Directory.GetFiles(saoi_templatesPath), (fname) =>
{
double[] minValues, maxValues;
Point[] minLocations, maxLocations;
Image<Gray, float> result = source.MatchTemplate(new Image<Bgr, byte>(fname), TM_TYPE.CV_TM_CCOEFF_NORMED);
result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);
if (maxValues[0] > 0.95)
{
//Rectangle match = new Rectangle(maxLocations[0], fname.Size ??? );
//source.Draw(match, new Bgr(Color.Blue), 3);
MessageBox.Show("match");
}
});
}
imageBox1.Image = frame;
}
我想要什么:
该功能应在imageBox1中搜索“模板”文件夹中的所有模板,如果找到匹配项,则在其周围绘制一个矩形
问题1:这段代码在普通的pictureBox上也能正常工作吗?
问题2:找到匹配项后,MessageBox应该弹出,对吗?为什么不这样做?
有用的信息(或没有?)
=>编辑 -我将阈值的值从0.95更改为0.60,但是什么也没有... -我尝试了在SO和Internet上找到的所有其他代码和信息...猜测是什么,仍然一无所获。 我为此苦苦挣扎了大约两个星期,真令人沮丧。