todd doehring Ответов: 2

Нужен пример для emgu super resolution


Я пытаюсь выполнить суперразрешение в ЭМГУ. У меня есть USB-камера микроскопа, где я могу получать последовательные кадры в файлы (или память). Я довольно новичок в C#, но у меня есть разумные рабочие знания. Я делать пусть Эмгу хорошо работает в VS .Сеть, где я получаю и сохраняю изображения.

Я хочу выполнить суперразрешение, но не могу найти ни одного приличного примера кода или просто примеров. Есть один пример (ссылка ниже), но я использую VS .Net, и мне трудно понять.

Пожалуйста, любая помощь будет очень признательна.

emgucv/SuperResolution. cs at master · neutmute/emgucv · GitHub[^]

Что я уже пробовал:

Обыскали все. Попробовал реализовать короткий пример из ссылки, но ничего не вышло. Нужен пример в VS.net чтобы заставить меня идти.

Sergey Alexandrovich Kryukov

Видите ли вы разницу между поиском примера и поиском решения? Это не одно и то же.
—СА

todd doehring

Не совсем понимаю, что ты имеешь в виду. Решение, пример; похожие термины. Как будет лучше.

BillWoodruff

Почему вы не задаете этот вопрос на форуме EMBU:

http://www.emgu.com/forum/

todd doehring

Сделал это, но не получил ни единого ответа.

2 Ответов

Рейтинг:
2

Mohan Baro

Это не решение. Это то, что я пробовал до сих пор, но это еще не работает с использованием EmguCv 3.1:

using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.Util;
using Emgu.CV.UI;
using Emgu.CV.Superres;


...

public void SuperReosultionTest()
 {

     Mat frame = new Mat(); // input video frame
     Mat result = new Mat(); // output superresolution image

     FrameSource _frameSource = new FrameSource(0); // input frames are obtained from WebCam or USB Camera
     //FrameSource fs = new FrameSource("video.avi",false); // input frames are read from a file
     _frameSource.NextFrame(frame); // input frames are obtained from WebCam or USB Camera

     ImageViewer viewer = new ImageViewer();
     viewer.Image = frame;
     viewer.ShowDialog();  // display a sample input frame

     SuperResolution _superResolution = new SuperResolution(Emgu.CV.Superres.SuperResolution.OpticalFlowType.Btvl, _frameSource);
     _superResolution.NextFrame(result); // output super resolution image

     viewer.Image = result;
     viewer.ShowDialog(); // display sample output superresolution image

 }



По какой-то причине он всегда вешает трубку.

SuperResolution _superResolution = new SuperResolution(Emgu.CV.Superres.SuperResolution.OpticalFlowType.Btvl, _frameSource);



Я все еще ищу решение.

После того как я добавил
try{...} catch(){...}


Я получаю следующее:
"OpenCV: вызываемая функциональность отключена для текущей сборки или платформы."

Поэтому я попробую еще раз с другой версией OpenCV.


Рейтинг:
1

Mohan Baro

Мое решение работает с процессором, так как мой OpenCV не является сборкой GPU.
Он очень медленный, около 15 секунд на кадр. Скорее всего, вы можете ускорить это с помощью работы в OpenCV/EmguCV GPU build.

Сначала я думал, что он не работает из-за длительной задержки вызова SuperRes, но я скомпилировал и запустил образец OpenCV в VC++, он также был медленным.

Если вы хотите сделать это в режиме реального времени, это будет проблемой.

Вот окончательное решение, которое сработало для меня с помощью EmguCV 3.1.0

Вам может понадобиться другой класс для файлового ввода-вывода и т. д:

using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.Util;
using Emgu.CV.UI;
using Emgu.CV.Superres;
using Emgu.CV.Cuda;




public void SuperResolutionTest()
  {

      Mat frame = new Mat(); // input video frame
      Mat result = new Mat(); // output superresolution image

      //FrameSource _frameSource = new FrameSource(0); // input frames are obtained from WebCam or USB Camera
      FrameSource _frameSource = new FrameSource("video.avi", false); // input frames are read from a file
      _frameSource.NextFrame(frame); // input frames are obtained from WebCam or USB Camera

      for (int i = 0; i < 5; i++)
      {
          frame.Save(@"c:\Dev\superres\inputFrame" + i.ToString("00") + ".png");
          SuperResolution _superResolution = new SuperResolution(Emgu.CV.Superres.SuperResolution.OpticalFlowType.Btvl, _frameSource);
          _superResolution.NextFrame(result); // output super resolution image

          result.Save(@"c:\Dev\superres\outputFrame"+i.ToString("00")+".png");
      }

  }





Эта программа будет использовать поток видеофайлов, считывать 5 кадров и генерировать 5 изображений с суперразрешением, используя параметры EmguCV/superres по умолчанию. С помощью примерной версии кода VC++/OpenCV вы можете управлять большинством параметров суперразрешения.

Просто, но это работает!


Daciod

У меня та же проблема, приложение зависает на создании superreslution resolver, в чем была причина?