我在图像的像素上迭代,尝试获取各个颜色值并将其平均。当我这样做时:
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
没有这些方法或者不支持索引。
答案 0 :(得分:2)
添加此项以供将来参考,但要访问基础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)))
}
}
}
答案 1 :(得分:1)
事实证明我需要的方法是img.At(x, y).RGBA()
,这将分别返回这些值。