Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用OpenCV和JavaCV捕获具有间隔的帧_Java_Opencv_Capture_Intervals_Javacv - Fatal编程技术网

使用OpenCV和JavaCV捕获具有间隔的帧

使用OpenCV和JavaCV捕获具有间隔的帧,java,opencv,capture,intervals,javacv,Java,Opencv,Capture,Intervals,Javacv,我已经开发了一个捕获帧的代码 OpenCVFrameGrabber grabber = new OpenCVFrameGrabber("D:/2.avi"); grabber.start(); IplImage frame = grabber.grab(); 在中,您希望捕获具有如下间隔的帧: 第一帧 第五帧 第10帧 第15帧 ..... ect 我怎么做?使用线程很好?简单:添加一个计数器变量以存储已捕获的帧数: public static void

我已经开发了一个捕获帧的代码

    OpenCVFrameGrabber grabber = new OpenCVFrameGrabber("D:/2.avi");        
    grabber.start();
    IplImage frame = grabber.grab();
在中,您希望捕获具有如下间隔的帧: 第一帧 第五帧 第10帧 第15帧 ..... ect


我怎么做?使用线程很好?

简单:添加一个计数器变量以存储已捕获的帧数:

public static void main(String[] args) 
{
    FrameGrabber grabber = new OpenCVFrameGrabber("demo.avi");
    if (grabber == null)
    {
        System.out.println("!!! Failed OpenCVFrameGrabber");
        return;
    }

    cvNamedWindow("video_demo");

    try            
    {
        grabber.start();
        IplImage frame = null;  

        int frame_counter = 1;
        while (true)
        {
            frame = grabber.grab();               
            if (frame == null)
            {
                System.out.println("!!! Failed grab");
                break;
            }

            if ((frame_counter % 5) == 0)
                // do something pretty with frame 5, 10, 15, 20, 25, ...

            cvShowImage("video_demo", frame);
            int key = cvWaitKey(33);
            if (key == 27)
            {
                break;
            }

            frame_counter++;
        }

    }
    catch (Exception e) 
    {    
        System.out.println("!!! Exception");
    }
}

Simple:添加一个计数器变量以存储已抓取的帧数:

public static void main(String[] args) 
{
    FrameGrabber grabber = new OpenCVFrameGrabber("demo.avi");
    if (grabber == null)
    {
        System.out.println("!!! Failed OpenCVFrameGrabber");
        return;
    }

    cvNamedWindow("video_demo");

    try            
    {
        grabber.start();
        IplImage frame = null;  

        int frame_counter = 1;
        while (true)
        {
            frame = grabber.grab();               
            if (frame == null)
            {
                System.out.println("!!! Failed grab");
                break;
            }

            if ((frame_counter % 5) == 0)
                // do something pretty with frame 5, 10, 15, 20, 25, ...

            cvShowImage("video_demo", frame);
            int key = cvWaitKey(33);
            if (key == 27)
            {
                break;
            }

            frame_counter++;
        }

    }
    catch (Exception e) 
    {    
        System.out.println("!!! Exception");
    }
}

嗨,谢谢你的支持。。cvWaitKey在这里扮演什么角色。??考虑投票有帮助的答案。此外,您还可以单击答案旁边的复选框,将其选择为问题的正式答案。通过这样做,你将帮助像你这样的未来访客。嗨,谢谢你的支持。。cvWaitKey在这里扮演什么角色。??考虑投票有帮助的答案。此外,您还可以单击答案旁边的复选框,将其选择为问题的正式答案。通过这样做,您将帮助像您这样的未来访客。