public override void Start() { _capture = new Capture(); _isCapturing = true; new Thread(() => { while (_isCapturing) { var frame = _capture.QueryFrame(); if (frame == null) { continue; } var image = frame.Convert <Rgb, byte>(); var imageCopy = image.Copy(); DispatcherHelper.CheckBeginInvokeOnUI(() => { ColorImageSource = imageCopy.ToBitmapSource(); imageCopy.Dispose(); }); var rgbImage = new RgbImageData(this, "color", image); Stage(rgbImage); Push(); Thread.Sleep(1000 / Fps); } }).Start(); base.Start(); }
public void Record(RgbImageData imageData) { if (!_recorders.Any(kvp => Equals(kvp.Key.Key, imageData.Key))) { //var width = imageData.Image.Width; //var height = imageData.Image.Height; //var filename = string.Format("{0}_{1}_{2}x{3}_{4}.avi", Filename, imageData.Key, width, height, Fps); var videoMetadata = new VideoMetadata { Key = imageData.Key, FileName = string.Format("{0}{1}", imageData.Key, ".avi"), Width = imageData.Image.Width, Height = imageData.Image.Height, Fps = Fps }; //VideoWriter captureOutput = new VideoWriter(@"test.avi", -1, 1, width, height, true); //var captureOutput = new VideoWriter(@"test.avi", CvInvoke.CV_FOURCC('W', 'M', 'V', '3'), 1, width, height, true); var videoWriter = new VideoWriter( GetTempFilePath(_tmpRecordPath, videoMetadata.FileName), CvInvoke.CV_FOURCC('D', 'I', 'V', 'X'), Fps, videoMetadata.Width, videoMetadata.Height, true); _recorders.Add(videoMetadata, videoWriter); _isRecorderStarted = true; } if (!_isRecorderStarted) { return; } // TODO: The _recorders.Single may raise an exception if sequence is empty or multiple items in sequence match var recorder = _recorders.Single(kvp => Equals(kvp.Key.Key, imageData.Key)).Value; //_recorder = new VideoWriter(Filename, 10, 320, 240, true); if (recorder != null) { Image <Rgb, byte> imageCopy = null; try { Console.WriteLine("Write image frame"); imageCopy = imageData.Image; recorder.WriteFrame(imageCopy.Convert <Bgr, byte>()); } finally { if (imageCopy != null) { imageCopy.Dispose(); } } } }
/// <summary> /// /// </summary> /// <param name="dataContainer"></param> /// <returns></returns> public override IDataContainer PreProcess(IDataContainer dataContainer) { var rgbImages = dataContainer.OfType<RgbImageData>().ToArray(); if (rgbImages.Any()) { if (_rgbImageData != null) _rgbImageData.Dispose(); _rgbImageData = rgbImages.First().Copy() as RgbImageData; return null; } if (_rgbImageData != null) { dataContainer.Add(_rgbImageData.Copy()); _rgbImageData.Dispose(); _rgbImageData = null; } return dataContainer; }
/// <summary> /// /// </summary> /// <param name="dataContainer"></param> /// <returns></returns> public override IDataContainer PreProcess(IDataContainer dataContainer) { var rgbImages = dataContainer.OfType <RgbImageData>().ToArray(); if (rgbImages.Any()) { if (_rgbImageData != null) { _rgbImageData.Dispose(); } _rgbImageData = rgbImages.First().Copy() as RgbImageData; return(null); } if (_rgbImageData != null) { dataContainer.Add(_rgbImageData.Copy()); _rgbImageData.Dispose(); _rgbImageData = null; } return(dataContainer); }
public override void Start() { _capture = new Capture(); _isCapturing = true; new Thread(() => { while (_isCapturing) { var frame = _capture.QueryFrame(); if (frame == null) continue; var image = frame.Convert<Rgb, byte>(); var imageCopy = image.Copy(); DispatcherHelper.CheckBeginInvokeOnUI(() => { ColorImageSource = imageCopy.ToBitmapSource(); imageCopy.Dispose(); }); var rgbImage = new RgbImageData(this, "color", image); Stage(rgbImage); Push(); Thread.Sleep(1000 / Fps); } }).Start(); base.Start(); }
public void Record(RgbImageData imageData) { if (!_recorders.Any(kvp => Equals(kvp.Key.Key, imageData.Key))) { //var width = imageData.Image.Width; //var height = imageData.Image.Height; //var filename = string.Format("{0}_{1}_{2}x{3}_{4}.avi", Filename, imageData.Key, width, height, Fps); var videoMetadata = new VideoMetadata { Key = imageData.Key, FileName = string.Format("{0}{1}", imageData.Key, ".avi"), Width = imageData.Image.Width, Height = imageData.Image.Height, Fps = Fps }; //VideoWriter captureOutput = new VideoWriter(@"test.avi", -1, 1, width, height, true); //var captureOutput = new VideoWriter(@"test.avi", CvInvoke.CV_FOURCC('W', 'M', 'V', '3'), 1, width, height, true); var videoWriter = new VideoWriter( GetTempFilePath(_tmpRecordPath, videoMetadata.FileName), CvInvoke.CV_FOURCC('D', 'I', 'V', 'X'), Fps, videoMetadata.Width, videoMetadata.Height, true); _recorders.Add(videoMetadata, videoWriter); _isRecorderStarted = true; } if (!_isRecorderStarted) return; // TODO: The _recorders.Single may raise an exception if sequence is empty or multiple items in sequence match var recorder = _recorders.Single(kvp => Equals(kvp.Key.Key, imageData.Key)).Value; //_recorder = new VideoWriter(Filename, 10, 320, 240, true); if (recorder != null) { Image<Rgb, byte> imageCopy = null; try { Console.WriteLine("Write image frame"); imageCopy = imageData.Image; recorder.WriteFrame(imageCopy.Convert<Bgr, byte>()); } finally { if (imageCopy != null) imageCopy.Dispose(); } } }