首页 > 解决方案 > 初始 BufferedImage 和转换后的 BufferedImage 对象没有给出相同的结果

问题描述

我正在编写一个测试过程,它将作为原始处理器的副本

我的课程将视频文件作为输入,然后生成帧相关信息

Java2DFrameConverter bufferedImgConverter = new Java2DFrameConverter();
String filePath = "Palivala.mp4";
File tsFile = new File(filePath);
FFmpegFrameGrabber ffmpegFrameGrabber = new FFmpegFrameGrabber(tsFile);
OpenCVFrameConverter matConverter = new OpenCVFrameConverter.ToMat();
ffmpegFrameGrabber.start();
try {
        while ((frame = ffmpegFrameGrabber.grabFrame(false, true, true, false)) != null) {
            BufferedImage bufferedImage = bufferedImgConverter.convert(frame);
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
            try {
                ImageIO.write(bufferedImage, "jpeg", buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }
            byte frameAsBytes[] = buffer.toByteArray();
            start = System.currentTimeMillis();
            BufferedImage bufferedImage2 = ImageIO.read(new ByteArrayInputStream(frameAsBytes));
            Mat mat = matConverter.convertToMat(bufferedImgConverter.convert(bufferedImage)); //problem is here, I explained problem at the bottom
            if (mat.empty())
                continue;
            if (prevMat != null) {
                // here I am generating required data and sending to the method which I want to test
            }
            prevMat = mat.clone();
            numProcessedFrames++;

        }
    } catch (org.bytedeco.javacv.FrameGrabber.Exception e) {
        System.out.println("Exception while grabbing frames for segment " + e);
    }
ffmpegFrameGrabber.stop();

如果我使用初始BufferedImage对象(bufferedImage),它按预期工作,但是当我使用转换后的BufferedImage对象(bufferedImage2)时,它没有按预期工作,即实际上我的进程找到有关冻结帧的信息,如果视频被冻结 20 秒

我正在standard-deviation使用mat来自的对象生成

Mat mat = matConverter.convertToMat(bufferedImgConverter.convert(bufferedImage)); //it works fine

Mat mat = matConverter.convertToMat(bufferedImgConverter.convert(bufferedImage2)); its the problem

我正在使用冻结帧信息standard-deviation,我standard-deviation-threshold的是90

标签: javabufferedimagejavacvjavax.imageio

解决方案


推荐阅读