You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV 4.5.2 Java绑定使用VideoWriter生成视频垂直翻转如何修复?

OpenCV 4.5.2 Java绑定生成视频垂直翻转修复方案

根因分析

你遇到的垂直翻转问题本质是字节数组的行存储顺序和OpenCV Mat的默认行存储顺序不匹配:

  • 直接导出ByteArray为bmp正常,是因为bmp文件格式默认采用从下到上的行存储顺序,和你传入的ByteArray行序一致
  • OpenCV Mat默认采用从上到下的行存储顺序,直接把ByteArray数据写入Mat后,行序完全倒置,因此导出单帧、生成视频都会出现垂直翻转
  • 旧版本运行正常大概率是当时的数据源行序、或数据预处理逻辑和当前环境不同,和OpenCV版本本身关联不大

修复方法

在写入Mat数据后、输出到视频/文件前,调用OpenCV原生的垂直翻转方法处理Mat即可,该方法为Native实现,性能损耗极低。

代码修改示例

仅需要修改writeFrame方法,新增一行翻转逻辑:

import org.opencv.core.Core

// 其余原有代码保持不变
fun writeFrame(data: ByteArray) {
    currentFrame.put(0, 0, data)
    // flipCode = 0 代表沿X轴翻转,即垂直翻转
    Core.flip(currentFrame, currentFrame, 0)
    videoWriter.write(currentFrame)
}

修改完成后可先调用Imgcodecs.imwrite导出单帧验证,确认方向正常后再生成视频即可。

可选优化

如果你的业务场景对性能要求极高,也可以在生成传入的ByteArray时,直接按照从上到下的行序生成,省略翻转步骤。但大多数场景下直接使用Core.flip的性能足够,无需额外调整数据生成逻辑。

内容的提问来源于stack exchange,提问作者artem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 09:12:01