简体   繁体   English

使用OpenCV和JavaCV间隔捕获帧

[英]Capture frames with intervals using OpenCV and JavaCV

i have already developed a code to capture frames 我已经开发了捕获帧的代码

    OpenCVFrameGrabber grabber = new OpenCVFrameGrabber("D:/2.avi");        
    grabber.start();
    IplImage frame = grabber.grab();

In want to capture frames with intervals like 1st frame 5th frame 10th frame 15th frame ..... ect 要捕获具有间隔的帧,例如第一帧,第五帧,第十帧,第十五帧..... ect

how can i do it? 我该怎么做? using threading is good? 使用线程好吗?

Simple : add a counter variable to store the number of frames you've already grabbed: 简单 :添加一个计数器变量来存储您已经抓取的帧数:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM