Member 14129828 Ответов: 1

Как сохранить определенный кадр видео с помощью emgucv?


мой код без ошибок, но не сохраняет ни одного кадра. когда я ставлю видео на паузу, я хочу сохранить текущий кадр.

Что я уже пробовал:

<pre>
<pre>namespace VideoCaptureApplication1
{
    public partial class Form2 : Form
    {
        private Capture _capture = null;
        Image<Bgr, Byte> frame;
        double FrameRate = 0;
        double TotalFrames = 0;
        double Framesno = 0;
        bool IsPlaying = false;
        
        public Form2()
        {
            InitializeComponent();
        }


private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
           
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                { 
                    _capture = null;
                    _capture = new Capture(openFileDialog1.FileName);

                    FrameRate = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS);
                    TotalFrames = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT);
                    Application.Idle += ProcessFrame ;
                    IsPlaying = true;
                }
                catch (NullReferenceException excpt)
                {
                    MessageBox.Show(excpt.Message);
                }
            }
        }
private void ProcessFrame(object sender, EventArgs arg)
        {
            try
            {
                Framesno = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES);
                frame = _capture.QueryFrame();


                if (frame != null && IsPlaying==true)
                {
                    pictureBox1.Image = frame.ToBitmap();

                    
                        Thread.Sleep((int)(1000.0 / FrameRate));
                    }
                  
                }
                    catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
 private void button4_Click(object sender, EventArgs e)
        {
            
            frame.Save("D\\" + Frame.ToString()+".jpg");

           
        }

1 Ответов

Рейтинг:
9

Gerry Schmitz

Если вы не "шагали через код" с отладчиком, чтобы увидеть, что происходит на каждом промежуточном шаге, как вы ожидаете, что кто-то еще это сделает?

Пройдитесь по коду и вернитесь, когда у вас будет лучшая идея, где проблема, потому что никто другой не может.

Это называется "тестирование".