java - 初始 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 秒
它给出的最终输出为 20 秒(如果我使用
bufferedImage
对象)它给出的最终输出为 14 秒(如果我使用
bufferedImage2
对象)
我正在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
standard-deviation
持续低于90
如果我使用bufferedImage
对象standard-deviation
持续低于90
6 秒,然后对于 1 帧,我得到standard-deviation
值,[118.0, 118.0, 119.0]
然后再低于下一帧90
如果我使用bufferedImage2
对象
解决方案
推荐阅读
- security - 为什么kerberos需要计算机时钟同步?
- python - 如何根据另一个在python中具有相同项目的列表重新排序列表
- ocaml - ocamldoc 无法使用 @param 正确显示参数名称或描述
- python - 如何在 python 中使用无穷大?
- python - 如何调用 Sagemaker XGBoost 端点后模型创建?
- python - Conway 的生命游戏下一代函数 (Python)
- python - 如何在 tkinter 中用黄色填充 ttk.button?
- python - 收到的 AttributeError:“numpy.ndarray”对象没有带有 permutation_importance 的属性“lower”
- c# - TabControl Padding 导致 TabPage 中的隐藏控件重新排序不正确
- python - 使用 Pulp 解决线性规划 python 问题