我正在迭代图像的像素,尝试获取各个颜色值并对它们进行平均。当我这样做时:
bounds := img.Bounds()
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
for x := bounds.Min.X; x < bounds.Max.X; x++ {
fmt.Println(reflect.TypeOf(img.At(x, y)))
}
}
我得到color.YCbCr
十亿次。如果我在没有 reflect.TypeOf
的情况下打印它,我会得到如下结果:
{154 135 124}
{153 135 124}
{152 135 124}
{152 135 124}
{151 135 124}
{149 135 124}
{147 135 124}
我需要能够访问单独的 Y、Cb 和 Cr 颜色,但是当我尝试 img.At(x, y).Cb
或 img.At(x, y)['Y']
甚至 img.At(x, y)[0]
,我收到各种编译时错误,告诉我 color.Color
没有这些方法或不支持索引。
最佳答案
添加此内容以供将来引用,但要访问底层 color.YCbCr
,您只需键入断言值,例如:
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
for x := bounds.Min.X; x < bounds.Max.X; x++ {
if c, ok := img.At(x, y).(color.YCbCr); ok {
fmt.Println(c.Y, c.Cb, c.Cr)
} else {
fmt.Println(reflect.TypeOf(img.At(x, y)))
}
}
}
关于go - 如何在 Go 中访问 YCbCr 颜色属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32216985/