package main
import (
"encoding/binary"
"fmt"
"image"
"image/color"
"image/png"
"io"
"log"
"os"
)
type RawImage []byte
// 输入文件句柄
// 输出所有图片切片数组
func readImageFile(r io.Reader) ([]RawImage, error) {
var magic int32
if err := binary.Read(r, binary.BigEndian, &magic); nil != err{
return nil , err
}
if 0x0803 != magic{
return nil, os.ErrInvalid
}
var picNum int32
if err := binary.Read(r, binary.BigEndian, &picNum); nil != err{
return nil, err
}
var width, heigth int32
if err := binary.Read(r, binary.BigEndian, &width); nil != err{
return nil, err
}
if err := binary.Read(r, binary.BigEndian, &heigth); nil != err{
return nil, err
}
imags := make([]RawImage, picNum)
for i := 0; i < int(picNum); i++ {
imags[i] = make(RawImage, width * heigth)
fLen, err := io.ReadFull(r, imags[i])
if nil != err{
return nil, err
}
if fLen != int(width * heigth) {
return nil, os.ErrInvalid
}
}
return imags, nil
}
func main() {
fp, _ := os.Open("C:\\Users\\wg\\go\\src\\学习go语言\\fxsjy-gonn-master\\example_mnist\\train-images-idx3-ubyte")//使用了绝对路径
if fp==nil{
fmt.Println("打开文件失败")
}
imgs, err := readImageFile(fp)
if nil != err{
log.Fatal(err)
}
fmt.Println(len(imgs))
// 使用GO生成图片
imCols := 28
imRows := 28
rect := image.Rect(0, 0, imCols, imRows)
rgba := image.NewNRGBA(rect)
//
for dy := 0; dy < imCols; dy++{
for dx := 0; dx < imRows; dx++{
rgba.Set(dy, dx, color.Gray{
imgs[2][dy + dx * imRows]})//这里指定不同的图像
}
}
fIm, err := os.Create("333.png")
fmt.Println("保存成功")
if nil != err{
log.Fatal(err)
}
err = png.Encode(fIm, rgba)
if nil != err{
log.Fatal(err)
}
}
go语言实现对图像数据集mnist的操作
猜你喜欢
转载自blog.csdn.net/zhuiyunzhugang/article/details/121209614
今日推荐
周排行