当前位置:首页 > Java

java yuv 如何裁剪

2026-03-25 09:40:32Java

YUV 图像裁剪方法

YUV 图像裁剪需要根据 YUV 格式(如 I420/NV12/NV21)处理不同分量的数据。以下以常见的 I420(YUV420P) 为例说明裁剪步骤:

获取原始参数

假设原始图像宽度为 srcWidth,高度为 srcHeight。目标裁剪区域左上角坐标为 (x, y),裁剪宽度为 cropWidth,高度为 cropHeight

java yuv 如何裁剪

裁剪 Y 分量(亮度)

Y 分量是完整分辨率,每个像素占 1 字节。裁剪时直接从原始数据中按行复制:

java yuv 如何裁剪

byte[] srcY = ...; // 原始 Y 数据
byte[] dstY = new byte[cropWidth * cropHeight];
for (int row = 0; row < cropHeight; row++) {
    System.arraycopy(
        srcY, (y + row) * srcWidth + x, // 源起始位置
        dstY, row * cropWidth,          // 目标起始位置
        cropWidth                       // 复制长度
    );
}

裁剪 UV 分量(色度)

I420 的 UV 分量是 2x2 下采样的,分辨率减半。裁剪时需注意坐标和跨距:

// U/V 分量宽高为原图 1/2
int uvSrcWidth = srcWidth / 2;
int uvSrcHeight = srcHeight / 2;
int uvCropWidth = cropWidth / 2;
int uvCropHeight = cropHeight / 2;

byte[] srcU = ...; // 原始 U 数据
byte[] dstU = new byte[uvCropWidth * uvCropHeight];
for (int row = 0; row < uvCropHeight; row++) {
    System.arraycopy(
        srcU, (y/2 + row) * uvSrcWidth + x/2,
        dstU, row * uvCropWidth,
        uvCropWidth
    );
}
// V 分量同理

NV12/NV21 处理

对于 NV12/NV21(半平面格式),UV 交错存储:

byte[] srcUV = ...; // NV12: UV交错数据
byte[] dstUV = new byte[cropWidth * cropHeight / 2];
int uvRowBytes = cropWidth; // 每行字节数(2字节 per UV像素)
for (int row = 0; row < cropHeight / 2; row++) {
    System.arraycopy(
        srcUV, (y/2 + row) * srcWidth + x,
        dstUV, row * uvRowBytes,
        uvRowBytes
    );
}

注意事项

  1. 坐标对齐:YUV420 要求裁剪的 xywidthheight 必须是偶数,否则会破坏色度采样结构。
  2. 性能优化:大数据量时可使用 ByteBuffer 或 JNI 加速处理。
  3. 格式差异:YUV422 或 YUV444 等格式需调整色度分量裁剪逻辑。

标签: javayuv
分享给朋友:

相关文章

uniapp yuv

uniapp yuv

YUV 格式在 UniApp 中的应用 在 UniApp 中处理 YUV 格式数据通常涉及视频编解码、图像处理或摄像头数据采集。YUV 是一种颜色编码系统,常用于视频传输和图像处理,与 RGB 格式相…

java如何上传文件

java如何上传文件

使用HttpURLConnection上传文件 在Java中,可以通过HttpURLConnection实现文件上传功能。需要设置请求头为multipart/form-data,并构建包含文件数据的请…

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

如何编写java

如何编写java

编写Java程序的基本步骤 安装Java开发工具包(JDK),确保系统环境变量配置正确。可以从Oracle官网下载最新版本的JDK并进行安装。 选择一个合适的集成开发环境(IDE),如Eclipse…

如何启用java

如何启用java

启用 Java 的方法 检查 Java 是否已安装 在命令行或终端输入 java -version,如果显示版本信息,说明 Java 已安装。若未安装,需从 Oracle 官网 或 OpenJDK 下…

java如何入门

java如何入门

学习基础语法 从Java的基础语法开始,包括变量、数据类型、运算符、控制结构(if-else、for循环、while循环)等。可以通过官方文档或入门教程学习。 安装开发环境 下载并安装JDK(J…