Соответствие шаблона EmguCV на живой камере - PullRequest
0 голосов
/ 16 июня 2019

Я новичок в области обработки изображений и пытаюсь создать приложение для сопоставления нескольких шаблонов с помощью 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 недель, это расстраивает.

...