Exemple #1
0
        private void button11_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Image <Gray, Byte>  last  = null;
                Image <Gray, float> flowX = null;
                Image <Gray, float> flowY = null;
                Image <Gray, byte>  draw  = null;
                MKeyPoint[]         keys;

                Accord.Video.FFMPEG.VideoFileWriter wr = new Accord.Video.FFMPEG.VideoFileWriter();

                VideoProcessig videoProcessig = new VideoProcessig(openFileDialog1.FileName, (map) =>
                {
                    Image <Gray, Byte> image = new Image <Gray, byte>(map);

                    if (last == null)
                    {
                        last  = image;
                        flowX = new Image <Gray, float>(map.Size);
                        flowY = new Image <Gray, float>(map.Size);
                        draw  = new Image <Gray, byte>(map.Size);
                        wr.Open("result.avi", map.Width, map.Height);
                        return(map);
                    }
                    else
                    {
                        CvInvoke.CalcOpticalFlowFarneback(last, image, flowX, flowY, 0.5, 3, 10, 3, 5, 1.5, Emgu.CV.CvEnum.OpticalflowFarnebackFlag.Default);
                        last = image;
                    }

                    CvInvoke.AccumulateSquare(flowX, flowY);
                    CvInvoke.Canny(flowY.Convert <byte>(FloatToByte), draw, 40, 50);


                    var result = draw.Bitmap;
                    wr.WriteVideoFrame(result);
                    return(result);
                });
                videoProcessig.Show();
            }

            byte FloatToByte(float val)
            {
                return((byte)val);
            }
        }
        /// <summary>
        /// Writes a frame to the video
        /// </summary>
        /// <param name="frame">The new image to write to the video</param>
        public void WriteVideoFrame(Bitmap frame)
        {
            lock (_writer_object_lock)
            {
                var ts = DateTime.Now - _last_call;

                if (_writer != null && _writer.IsOpen)
                {
                    try
                    {
                        _writer.WriteVideoFrame(frame, ts);
                    }
                    catch (Exception)
                    {
                        System.Console.WriteLine("Error encoding frame");
                    }
                }
            }
        }