Вот как можно просматривать и сохранять видео одновременно с помощью emgu cv.
public Body()
{
InitializeComponent();
if (videoCapture == null)
{
videoCapture = new Emgu.CV.VideoCapture(0);
}
videoCapture.ImageGrabbed += VideoCapture_ImageGrabbed;
videoCapture.Start();
}
private void VideoCapture_ImageGrabbed(object sender, EventArgs e)
{
if (fileChanged)
{
totalFrames = videoCapture.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameCount);
fps = videoCapture.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.Fps);
int fourcc = Convert.ToInt32(videoCapture.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FourCC));
int frameHeight = Convert.ToInt32(videoCapture.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameHeight));
int frameWidth = Convert.ToInt32(videoCapture.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameWidth));
string destination = "C:\\Users\\ITNOA\\Desktop\\savedVideoDHS\\" + i + ".avi";
videoWriter = new VideoWriter(destination, VideoWriter.Fourcc('I', 'Y', 'U', 'V'), fps, new Size(frameWidth, frameHeight), true);
fileChanged = false;
}
Mat m = new Mat();
videoCapture.Retrieve(m);
pictureBox1.Image = m.ToImage<Bgr, byte>().Bitmap;
videoWriter.Write(m);
}
В приведенном выше коде, который мне понадобился для сохранения видео в несколько файлов, я заново инициализирую программу записи видео.Для одного файла он должен быть инициализирован один раз.
Я пробовал несколько кодов сжатия, но у меня сработало следующее
Код сжатия VideoWriter.Fourcc ('I', 'Y', 'U',' V ')
videoWriter = new VideoWriter (назначение, VideoWriter.Fourcc (' I ',' Y ',' U ',' V '), кадры в секунду, новый размер(frameWidth, frameHeight), true);
Надеюсь, что это поможет