Я новичок в области обработки изображений и пытаюсь создать приложение для сопоставления нескольких шаблонов с помощью EmguCV. На Form1 у меня есть:
- imageBox (pictureBox от EmguCV), где я получаю изображения (в режиме реального времени) с камеры;
- кнопка, которая вызывает «функцию соответствия нескольких шаблонов».
Мне удалось получить изображения с камеры в imageBox1, и теперь я борюсь с этой функцией сопоставления шаблонов. Я нашел некоторую помощь по SO здесь , но я не знаю, почему код не работает (окно сообщений не появляется). Я немного изменил код, чтобы соответствовать своему случаю, и получил его так:
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 все шаблоны в папке Templates и, если совпадение найдено, нарисовать вокруг нее прямоугольник
вопрос1: этот код работает также с обычным PictureBox?
question2: MessageBox должен появиться при обнаружении совпадения, верно? Почему не делает это?
Полезная информация (или нет?):
- can_process становится правдой, когда я нажимаю кнопку
- saoi_templatesPath = Environment.GetFolderPath (Environment.SpecialFolder.Desktop) + @ "\" + "S.A.O.I \ Templates";
- шаблоны из этой папки имеют расширение .PNG с глубиной 24 бит на пиксель и обрезаются из изображения, сохраненного из imageBox1
- imageBox1 имеет Size = (511, 385) с SizeMode = Zoom
- Я использую EmguCV (2.2.1.1150), потому что я не могу заставить камеру работать на более новых версиях
=> ИЗМЕНИТЬ
- Я изменил значение порога с 0,95 до 0,60 и до сих пор ничего ...
- Я перепробовал все другие коды и информацию, которые я нашел в SO и интернете ... угадайте, что, все еще ничего
Я борюсь с этим уже около 2 недель, это расстраивает.