Go中的RGB到YUV420P图像转换



我想知道,如何在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.RGBA,而convertedimage.YCbCr。请注意,converted的颜色分量的阵列中的对应位置pos是根据original中的像素坐标来计算的。

最新更新