JavaCV 通过实现光流算法来判断视频前后帧是否存在差别

博主介绍:小黄鸭技术

擅长领域:Java、实用工具、运维

系列专栏:开发工具 Java之路 八股文之路

如果文章写作时有错误的地方,请各位大佬指正,一起进步!!!

欢迎大家点赞➕收藏⭐➕评论支持博主  

目录

前言

实现思路

实现代码

 前后帧无变化视频制作


前言

        因为业务需要过滤掉一些无用的视频来减少算法服务器的鸭利,经过讨论决定认定视频前后帧没有变化的视频为无用视频。

实现思路

通过实现光流算法来计算视频是否有用:

  1. 获取视频的每一帧。
  2. 将每一帧转换为灰度图像。
  3. 使用光流算法计算两个连续帧之间的运动向量。
  4. 利用计算出的运动向量来判断两个帧之间是否有明显的区别。

实现代码

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.videoio.VideoCapture;

public class Main {
    public static void main(String[] args) {
        // 加载OpenCV库
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        // 读取视频文件
        VideoCapture cap = new VideoCapture("video.mp4");

        // 读取第一帧
        Mat prevFrame = new Mat();
        cap.read(prevFrame);

        // 循环处理剩下的帧
        while (true) {
            // 读取下一帧
            Mat frame = new Mat();
            boolean success = cap.read(frame);

            // 如果到达视频结尾,则退出循环
            if (!success) {
                break;
            }

            // 计算当前帧与前一帧之间的绝对差
            Mat diff = new Mat();
            Core.absdiff(frame, prevFrame, diff);

            // 检查差异图像是否全为零
            int nonZeroCount = Core.countNonZero(diff);
            if (nonZeroCount == 0) {
                System.out.println("两帧之间没有变化");
            } else {
                System.out.println("两帧之间发生了变化");
            }

            // 设置前一帧为下一次迭代的当前帧
            prevFrame = frame;
        }

        // 释放视频捕获对象
        cap.release();
    }
}

 前后帧无变化视频制作

1.可以通过静止摄像头来拍摄。

2.下载一个静止的图片,然后使用视频编辑软件将它转换为视频文件。这样的视频中的所有帧都是一样的,因此它没有前后帧变化。

                  欢迎大家点赞➕收藏⭐➕评论支持博主   

你可能感兴趣的:(Java之路,音视频,人工智能)