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

如何在Python中实现RGB图像转YUV420 planar格式?求相关指引

Python实现RGB到YUV420 Planar格式转换

方法一:用OpenCV快速实现(推荐)

OpenCV内置了RGB到YUV格式的转换接口,能快速得到YUV420 planar数据:

import cv2
import numpy as np

def rgb_to_yuv420_planar(rgb_image):
    # 将RGB转换为I420格式的YUV(半平面结构)
    yuv_i420 = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2YUV_I420)
    h, w = rgb_image.shape[:2]
    
    # 拆分出Y、降采样后的U和V分量
    y = yuv_i420[:h, :w]
    u = yuv_i420[h:h+h//2:2, ::2]
    v = yuv_i420[h+h//2::2, ::2]
    
    # 合并为planar格式:Y连续存储 → U连续存储 → V连续存储
    return np.concatenate([y.flatten(), u.flatten(), v.flatten()])

# 使用示例
# 注意:OpenCV默认读取图像为BGR格式,需先转成RGB
bgr_img = cv2.imread("your_image.jpg")
rgb_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2RGB)
yuv420_planar_data = rgb_to_yuv420_planar(rgb_img)

方法二:手动实现(理解原理)

基于BT.601标准的转换公式手动计算,适合想搞清楚底层逻辑的场景:

import numpy as np

def rgb_to_yuv420_planar_manual(rgb_image):
    r, g, b = rgb_image[:, :, 0], rgb_image[:, :, 1], rgb_image[:, :, 2]
    h, w = rgb_image.shape[:2]
    
    # 计算Y分量(范围0-255)
    y = 0.299 * r + 0.587 * g + 0.114 * b
    y = y.astype(np.uint8)
    
    # 计算U分量并做2x2降采样(加128偏移使范围回到0-255)
    u = (-0.14713 * r - 0.28886 * g + 0.436 * b) + 128
    u = u.astype(np.uint8)
    # 对U分量降采样:取每个2x2块的平均值
    u_down = np.zeros((h//2, w//2), dtype=np.uint8)
    for i in range(h//2):
        for j in range(w//2):
            u_down[i,j] = np.mean(u[2*i:2*i+2, 2*j:2*j+2])
    
    # 计算V分量并做2x2降采样
    v = (0.615 * r - 0.51499 * g - 0.10001 * b) + 128
    v = v.astype(np.uint8)
    v_down = np.zeros((h//2, w//2), dtype=np.uint8)
    for i in range(h//2):
        for j in range(w//2):
            v_down[i,j] = np.mean(v[2*i:2*i+2, 2*j:2*j+2])
    
    # 合并为planar格式
    return np.concatenate([y.flatten(), u_down.flatten(), v_down.flatten()])

# 使用示例
rgb_img = cv2.cvtColor(cv2.imread("your_image.jpg"), cv2.COLOR_BGR2RGB)
yuv420_planar_data = rgb_to_yuv420_planar_manual(rgb_img)

注意事项

YUV420 planar的存储总大小为 宽×高×1.5 字节,其中Y占 宽×高 字节,U和V各占 (宽×高)/4 字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:52:50