На данный момент у меня есть функция, которая вызывает изображение из интерфейса моей камеры. Затем это изображение сохраняется на жестком диске и также отображается в графическом интерфейсе Windows Forms.
Функция внутри интерфейса камеры, которая возвращает изображение, выглядит следующим образом:
высота и ширина являются целыми числами, которые являются частью класса интерфейса камеры. В этом случае они были установлены на 800x600.
public Image<Bgr,byte> QueryFrame()
{
Image<Bgr, byte> temp;
lock (key)
{
using (Capture cap = new Capture())
{
cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, height);
cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, width);
temp = cap.QueryFrame().Copy();
}
}
return temp;
}
При вызове этой функции несколько раз выяснялось, что захват кадра занимал сравнительно много времени, блокируя программу на несколько секунд. Затем, после захвата нескольких кадров при запуске программы в Debug с Visual C # 2010, выскочила ошибка Windows для vshost.exe:
Faulting application DashboardGUI.vshost.exe, version 10.0.30319.1, time stamp 0x4ba2084b, faulting module MSVCR90.dll, version 9.0.30729.6161, time stamp 0x4dace5b9, exception code 0xc0000005, fault offset 0x00024682, process id 0xe78, application start time 0x01cc792086025f01.
Затем я приступил к публикации приложения, запустил его из исполняемого файла и получил ошибку:
Application: DashboardGUI.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.TypeInitializationException
Stack:
at Emgu.CV.CvInvoke.cvReleaseCapture(IntPtr ByRef)
at Emgu.CV.Capture.DisposeObject()
at Emgu.Util.DisposableObject.Finalize()
Однако у меня также было то же исключение с Emgu.CV.CvInvoke.cvCreateCameraCapture (Int32).
Что вызывает эти проблемы? Как их можно избежать? И есть ли способ сделать захват кадра быстрее, чем в настоящее время (когда он не падает)?