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

标签 java opencv capture intervals javacv

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

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

想要捕获具有间隔的帧,例如 第一帧 第5帧 第10帧 第15帧 .....等

我该怎么做?使用线程好吗?

最佳答案

简单:添加一个计数器变量来存储您已抓取的帧数:

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

关于java - 使用 OpenCV 和 JavaCV 捕获具有间隔的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13382886/

相关文章:

java - 如何在检索Firebase数据库节点后动态制作模型?

java - 如何生成随机数并将其导出为 JSON?

python - 使用 Python OpenCV 在模糊对象周围找到紧密轮廓

c++ - 访问 3 channel 矩阵的元素

opencv - 在 Ubuntu 11.10 上安装 OpenCV 2.3.1 时出错

C#:创建一个事件,每当另一个具有监听器的事件被触发时,该事件就会被触发,也许可以通过反射动态地触发?

java - Spring Boot 的 WelcomePageHandlerMapping 在无效的 API 路径上被调用,其中预期出现 404 错误

java - 限制/控制用户在 Java 中打印的能力

audio - 如何使用 ffmpeg 从 Linux USB 捕获设备同时捕获音频和视频

java - Pcap4j 库 : Exception in thread "main" java. io.IOException:没有要捕获的 NIF