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.RGBA
,converted
是 image.YCbCr
。看到 converted
的颜色分量数组中的相应位置 pos
是根据 original
.
中的像素坐标计算的
我想知道,如何在 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
,converted
是 image.YCbCr
。看到 converted
的颜色分量数组中的相应位置 pos
是根据 original
.