0

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

4

1 回答 1

2

您可以使用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.RGBA并且convertedimage.YCbCr. pos请注意,颜色分量数组中的相应位置converted是根据 中的像素坐标计算得出的original

于 2020-04-11T21:29:46.367 回答