OpenCVSharp #6
نویسنده: وحید نصیری
تاریخ: ۱۳۹۴/۰۳/۱۶ ۱۰:۴۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
using (var capture = new CvCapture(@"..\..\Videos\drop.avi"))
{
var image = capture.QueryFrame();
} IplImage image;
while ((image = Capture.QueryFrame()) != null)
{
_pictureBoxIpl1.RefreshIplImage(image);
Thread.Sleep(interval);
Application.DoEvents();
} timer = new Timer(); timer.Interval = (int)(1000 / Capture.Fps); timer.Tick += Timer_Tick;
private void FrmMain_Load(object sender, System.EventArgs e)
{
_pictureBoxIpl1 = new PictureBoxIpl
{
AutoSize = true
};
flowLayoutPanel1.Controls.Add(_pictureBoxIpl1);
} private void BtnStart_Click(object sender, System.EventArgs e)
{
if (_worker != null && _worker.IsBusy)
{
return;
}
_worker = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
_worker.DoWork += workerDoWork;
_worker.ProgressChanged += workerProgressChanged;
_worker.RunWorkerCompleted += workerRunWorkerCompleted;
_worker.RunWorkerAsync();
BtnStart.Enabled = false;
} private void workerDoWork(object sender, DoWorkEventArgs e)
{
using (var capture = new CvCapture(@"..\..\Videos\drop.avi"))
{
var interval = (int)(1000 / capture.Fps);
IplImage image;
while ((image = capture.QueryFrame()) != null &&
_worker != null && !_worker.CancellationPending)
{
_worker.ReportProgress(0, image);
Thread.Sleep(interval);
}
}
}
private void workerProgressChanged(object sender, ProgressChangedEventArgs e)
{
var image = e.UserState as IplImage;
if (image == null) return;
Cv.Not(image, image);
_pictureBoxIpl1.RefreshIplImage(image);
}
private void workerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_worker.Dispose();
_worker = null;
BtnStart.Enabled = true;
} private void BtnStop_Click(object sender, System.EventArgs e)
{
if (_worker != null)
{
_worker.CancelAsync();
_worker.Dispose();
}
BtnStart.Enabled = true;
} An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll Additional information: Exception has been thrown by the target of an invocation.
private void button1_Click(object sender, EventArgs e)
{
if (_worker != null && _worker.IsBusy)
{
return;
}
_worker = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
_worker.DoWork += workerDoWork;
_worker.ProgressChanged += workerProgressChanged;
_worker.RunWorkerCompleted += workerRunWorkerCompleted;
_worker.RunWorkerAsync();
} private void workerDoWork(object sender, DoWorkEventArgs e)
{
//var interval = (int)(1000 / _capture.Fps);
Image image;
while ((image = _capture.QueryFrame().ToBitmap()) != null &&
_worker != null && !_worker.CancellationPending)
{
_worker.ReportProgress(0, image);
//Thread.Sleep(interval);
Thread.Sleep(10);
}
}
private void workerProgressChanged(object sender, ProgressChangedEventArgs e)
{
var image = e.UserState as Image;
if (image == null) return;
//Cv.Not(image, image);
//_pictureBoxIpl1.RefreshIplImage(image);
//_pictureBoxIpl1.Image=image;
_pictureBoxIpl1.Invoke(new EventHandler(delegate
{
_pictureBoxIpl1.Image = image;
}));
}
private void workerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_worker.Dispose();
_worker = null;
} private void LoadCameras()
{
List<string> data = new List<string>();
List<KeyValuePair<int, string>> ListCamerasData = new List<KeyValuePair<int, string>>();
//-> Find systems cameras with DirectShow.Net dll
DsDevice[] _SystemCamereas = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
int _DeviceIndex = 0;
foreach (DirectShowLib.DsDevice _Camera in _SystemCamereas)
{
ListCamerasData.Add(new KeyValuePair<int, string>(_DeviceIndex, _Camera.Name));
data.Add(_Camera.Name);
_DeviceIndex++;
}
CameraList.ItemsSource = data;
} using (CvCapture capture = CvCapture.FromCamera(cameraIndex))
{
//var interval = (int)(1000 / capture.Fps);
IplImage image;
while (_worker != null && !_worker.CancellationPending)
{
if ((image = capture.QueryFrame()) != null)
{
_worker.ReportProgress(0, image);
Thread.Sleep(10);
}
}
} private static double getFps(CvCapture capture)
{
double counter = 0;
double seconds = 0;
var watch = Stopwatch.StartNew();
while (capture.QueryFrame() != null)
{
counter++;
seconds = watch.ElapsedMilliseconds / (double)1000;
if (seconds >= 3)
{
watch.Stop();
break;
}
}
var fps = counter / seconds;
return fps;
} using (var capture = CvCapture.FromCamera(index: 0))
{
var fps = getFps(capture);
capture.SetCaptureProperty(CvConst.CV_CAP_PROP_FPS, fps);
var interval = (int)(1000 / fps); while (capture.QueryFrame() != null) {
...
} while (capture.QueryFrame() == null) { }