我想知道,如何在 Go 中执行从 RGB 到 YUV 420P 图像的转换(更准确地说*image.RGBA
是*image.YcbCr
)。image
我还没有在包中找到任何标准方法。由于我也没有找到任何库,我唯一的想法是使用 逐个像素地制作它color.RGBToYCbCr()
,但我意识到*image.YcbCr
没有Set()
直接处理像素的方法,所以我有点困惑。我会很感激一些方向或代码。问候
问问题
654 次
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
并且converted
是image.YCbCr
. pos
请注意,颜色分量数组中的相应位置converted
是根据 中的像素坐标计算得出的original
。
于 2020-04-11T21:29:46.367 回答