LEATH
如果您尝试比较两个图像并且只需要将其归结为一个数字,则以下方法将起作用。这在(例如)遗传算法中很有用,您希望比较一组候选对象并选择与参考图像差异最小的一个:访问每一个像素,将它分解为它的部分:R,G,B,A(在去:image.At(x,y).RGBA())从参考图像中相应的像素值中减去 RGBA 值。将差异平方,将它们相加。取总和的平方根。这个数字会让您大致了解图像的差异程度。如果你知道这两个图像都是image.RGBA(或者你可以转换它们)的实例,那么你可以做更快的事情:直接从RGBA.Pix. 这就是我在这里所做的,它大约比img.At(x,y).RGBA()每个像素对快 10 倍:func FastCompare(img1, img2 *image.RGBA) (int64, error) { if img1.Bounds() != img2.Bounds() { return 0, fmt.Errorf("image bounds not equal: %+v, %+v", img1.Bounds(), img2.Bounds()) } accumError := int64(0) for i := 0; i < len(img1.Pix); i++ { accumError += int64(sqDiffUInt8(img1.Pix[i], img2.Pix[i])) } return int64(math.Sqrt(float64(accumError))), nil}func sqDiffUInt8(x, y uint8) uint64 { d := uint64(x) - uint64(y) return d * d}