直接上代码:
public void Run()
{
var capture = new VideoCapture();
capture.Set(CaptureProperty.FrameWidth, 640);
capture.Set(CaptureProperty.FrameHeight, 480);
capture.Open(-1);
if (!capture.IsOpened())
throw new Exception("capture initialization failed");
var fs = FrameSource.CreateCameraSource(-1);
var sr = SuperResolution.CreateBTVL1();
sr.SetInput(fs);
using (var normalWindow = new Window("normal"))
using (var srWindow = new Window("super resolution"))
{
var normalFrame = new Mat();
var srFrame = new Mat();
while (true)
{
capture.Read(normalFrame);
sr.NextFrame(srFrame);
if (normalFrame.Empty() || srFrame.Empty())
break;
normalWindow.ShowImage(normalFrame);
srWindow.ShowImage(srFrame);
Cv2.WaitKey(100);
}
}
}
private void workerDoReadVideo(object sender, DoWorkEventArgs e)
{
using (var capture = new VideoCapture(@"..\..\Videos\drop.avi"))
{
var interval = (int)(1000 / capture.Fps);
using (var image = new Mat())
{
while (_worker != null && !_worker.CancellationPending)
{
capture.Read(image);
if (image.Empty())
{
break;
}
_worker.ReportProgress(0, image);
Thread.Sleep(interval);
}
}
}
}
private static double getFps(VideoCapture capture)
{
using (var image = new Mat())
{
while (true)
{
/* start camera */
capture.Read(image);
if (!image.Empty())
{
break;
}
}
}
using (var image = new Mat())
{
double counter = 0;
double seconds = 0;
var watch = Stopwatch.StartNew();
while (true)
{
capture.Read(image);
if (image.Empty())
{
break;
}
counter++;
seconds = watch.ElapsedMilliseconds / (double)1000;
if (seconds >= 3)
{
watch.Stop();
break;
}
}
var fps = counter / seconds;
return fps;
}
}