コード例 #1
0
        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();
        }
コード例 #2
0
        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();
                    }
                }
            }
        }
コード例 #3
0
        /// <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;
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        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();
        }
コード例 #6
0
        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();
                }
            }
        }