需要emgu超级分辨率的例子 [英] Need example for emgu super resolution
问题描述
我正在尝试在EMGU中执行超分辨率。我有一台显微镜USB摄像头,我可以在其中获取文件(或内存)的连续帧。我对C#很新,但有合理的工作知识。我做让Emgu在VS .Net中运行良好,我正在获取并保存图像。
我想执行超分辨率但是找不到任何体面的示例代码或只是示例。有一个例子(链接如下),但我使用的是VS .Net,我很难理解。
请大家非常感谢。< br $> b $ b
emgucv / SuperResolution .cs at master·neutmute / emgucv·GitHub [ ^ ]
我尝试过:
搜索了一切。试图从链接实现简短的例子,但根本不工作。需要VS.net中的示例才能让我前进。
这不是解决方案。这是我到目前为止所尝试的,但它还没有使用EmguCv 3.1:
使用 Emgu.CV;
使用 Emgu.CV.CvEnum;
使用 Emgu.CV.Structure;
使用 Emgu.Util;
使用 Emgu.CV.UI;
使用 Emgu.CV.Superres;
.. 。
public void SuperReosultionTest()
{
Mat frame = new Mat(); // 输入视频框
Mat result = 新 Mat(); // 输出超分辨率图像
FrameSource _frameSource = new FrameSource( 0 ); // 输入帧从WebCam或USB Camera 获取
// FrameSource fs = new FrameSource(video.avi,false); //输入帧从文件中读取
_frameSource.NextFrame(frame); // 输入帧是从WebCam或USB Camera获得的
ImageViewer viewer = new ImageViewer();
viewer.Image = frame;
viewer.ShowDialog(); // 显示示例输入框
SuperResolution _superResolution = new SuperResolution(Emgu.CV.Superres.SuperResolution.OpticalFlowType.Btvl,_frameSource);
_superResolution.NextFrame(result); // 输出超级分辨率图像
viewer.Image = result;
viewer.ShowDialog(); // 显示样本输出超分辨率图像
}
出于某种原因,它总是挂断
< pre lang =C#> SuperResolution _superResolution = new SuperResolution(Emgu.CV.Superres.SuperResolution.OpticalFlowType.Btvl,_frameSource);< br $>
我还在寻找解决方案。
我添加后尝试 {...} catch (){...}
我得到以下内容:
OpenCV:当前版本或平台禁用被调用的功能。
所以我将再次尝试使用另一个版本的OpenCV。
我的解决方案是使用CPU,因为我的OpenCV不是GPU构建。
每帧超级约15秒。最有可能的是你可以通过OpenCV / EmguCV GPU构建来提高速度。
最初我认为它因为SuperRes呼叫的长时间延迟而无法正常工作,但是我在VC ++中编译并运行OpenCV示例它也很慢。
如果你想实时做这将是一个问题。
以下是使用EmguCV 3.1.0的最终解决方案
您可能需要其他类文件I / O等:
使用 Emgu.CV;
使用 Emgu.CV.CvEnum;
使用 Emgu.CV.Structure;
使用 Emgu.Util;
使用 Emgu.CV.UI;
使用 Emgu.CV.Superres;
使用 Emgu.CV.Cuda;
public void SuperResolutionTest()
{
Mat frame = new Mat(); // 输入视频框
Mat result = 新 Mat(); // 输出超分辨率图像
// FrameSource _frameSource = new FrameSource(0); //输入帧是从WebCam或USB Camera获得的
FrameSource _frameSource = new FrameSource( video.avi, false ); // 输入框架从文件中读取
_frameSource.NextFrame(frame); // 输入框架从WebCam或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); // 输出超级分辨率图像
result.Save( @ c:\ Dev \ superres \outputFrame + i.ToString( 00)+ .PNG跨度>);
}
}
该程序将使用读取5帧的视频文件流,并使用默认的EmguCV / superres参数生成5个超分辨率图像。使用VC ++ / OpenCV示例代码版本,您可以控制大部分参数以获得超分辨率。
简单但有效!
I'm trying to perform super-resolution in EMGU. I have a microscope USB camera where I can acquire sequential frames to files (or memory). I'm pretty new to C# but have reasonable working knowledge. I do have Emgu working well in VS .Net where I'm acquiring and saving images.
I want to perform super-resolution but can't find any decent example code or just examples. There's one example (link below), but I'm using VS .Net and I'm having a hard time understanding.
Please any help is GREATLY appreciated.
emgucv/SuperResolution.cs at master · neutmute/emgucv · GitHub[^]
What I have tried:
Searched everything. Tried to implement short example from link but not working at all. Need example in VS.net to get me going.
This is not a solution. This is what I tried so far, but it is not working yet using 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 }
For some reason it always hangs up on
SuperResolution _superResolution = new SuperResolution(Emgu.CV.Superres.SuperResolution.OpticalFlowType.Btvl, _frameSource);
I am still looking for a solution.
After I addedtry{...} catch(){...}
I get the following:
"OpenCV: The called functionality is disabled for current build or platform."
So I will try again with another version of OpenCV.
My solution is working with CPU as my OpenCV is not a GPU build.
It super-slow about 15 seconds per frame. Most likely you can speed this up with working in OpenCV/EmguCV GPU build.
Initially I thought it was not working because of the long delay in SuperRes call, but I compiled and ran the OpenCV sample in VC++ it was also slow.
If you want to do this real-time it will be a issue.
Here is the final solution that worked for me using EmguCV 3.1.0
You might need other class for file I/O etc:
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"); } }
This program will use an video file stream read 5 frames and generate 5 super resolution images using default EmguCV/superres parameters. With the VC++/OpenCV sample version of the code you can control most of the parameters for super resolution.
Simple but it works!
这篇关于需要emgu超级分辨率的例子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!