Я пытался нарисовать часть базы данных MNIST в файл изображения, в моих первых попытках сгенерированное изображение выглядело смещенным, как показано ниже:
Я знаю, что обучающий файл состоит из 60 000 изображений, каждое размером 28 x 28 пикселей, которые в файле представлены в виде массива 28 x 28 x 60 000 uint8, что должно дать 47040000 в качестве его длины.
Тем не менее, при печати длины файла он дает 47040016 в качестве длины, что дополнительные 16 цифр являются причиной смещения изображения.
Используется следующий код: const imgNum определяется изображением, которое я хочу напечатать, и длиной изображения. Я не вижу ничего странного, когда читаю файл изображений.
package main
import (
"image"
"image/color"
"image/png"
"io/ioutil"
"os"
)
const (
imgSideLength = 28
imgSize = imgSideLength * imgSideLength
imgNum = 499 * imgSize
)
var images []uint8
func main() {
images, err := ioutil.ReadFile("train-images")
check(err)
canvas := image.NewRGBA(image.Rect(0, 0, imgSideLength, imgSideLength))
pixelIndex := imgNum
for i := 0; i < imgSideLength; i++ {
for j := 0; j < imgSideLength; j++ {
currPixel := images[pixelIndex]
pixelIndex++
pixelColor := color.RGBA{currPixel, currPixel, currPixel, 255}
canvas.Set(j, i, pixelColor)
}
}
numFile, err := os.Create("number.png")
check(err)
defer numFile.Close()
png.Encode(numFile, canvas)
}
func check(e error) {
if e != nil {
panic(e)
}
}
Зная, что именно эти 16 пикселей вызывают сдвиг изображения, я решил изменить imgNum:
imgNum = 499 * imgSize + 16
С этим изменением изображение прорисовывается нормально.
Но я все еще хотел бы знать, почему есть дополнительные 16 номеров, которых не должно быть?