Go 中的 RGB 到 YUV 420P 图像转换

RGB to YUV 420P image conversion in Go

我想知道,如何在 Go 中执行从 RGB 到 YUV 420P 图像的转换(更准确地说是 *image.RGBA*image.YcbCr)。我还没有在 image 包中找到任何标准方法。由于我也没有找到任何库,我唯一的想法是使用 color.RGBToYCbCr() 逐个像素地制作它,但我意识到 *image.YcbCr 没有 Set() 直接工作的方法在像素上,所以我有点困惑。对于一些指导或代码,我将不胜感激。 问候

您可以使用 image.NewYCbCr() 创建一个 image.YCbCr 的实例,您可以直接操作其像素。那么只需要对图像中的每个像素使用 color.RGBToYCbCr() 即可:

bounds := original.Bounds()
converted := image.NewYCbCr(bounds, image.YCbCrSubsampleRatio420)

for row := 0; row < bounds.Max.Y; row++ {
    for col := 0; col < bounds.Max.X; col++ {
        r, g, b, _ := original.At(col, row).RGBA()
        y, cb, cr := color.RGBToYCbCr(uint8(r), uint8(g), uint8(b))

        converted.Y[converted.YOffset(col, row)] = y
        converted.Cb[converted.COffset(col, row)] = cb
        converted.Cr[converted.COffset(col, row)] = cr
    }
}

在上面的代码片段中,original 是常规 image.RGBAconvertedimage.YCbCr。看到 converted 的颜色分量数组中的相应位置 pos 是根据 original.

中的像素坐标计算的