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"); } } } }