C++ 二进制读入和Minist图片展示
文章目录
- 二进制读入
- Minist手写集与EasyX
- 基本思路
- 代码实现
- read函数
- main函数
- 宏定义
- 效果图
二进制读入
二进制读入的方法有很多,这里我们使用fread函数进行读入(因为读取的是pixel,使用fread可以一次性读入)
Minist手写集与EasyX
MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST). 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员. 测试集(test set) 也是同样比例的手写数字数据
本文章讲的是利用EasyX将Minist手写集图片展示到前台
EasyX官网及下载地址
Minist数据集下载
基本思路
1.首先在Minist数据集中读入二进制数据,因为Minist数据集是经过灰度处理的图像,所以RGB三色全有1个pixel来表示
2.利用EasyX画方块的API进行绘图并填充RGB颜色
代码实现
read函数
byte* read(const char path[],int count)
{int cnt = count > MAX_READCOUNTS ? MAX_READCOUNTS : count;cnt *= BIT_WIDTH * BIT_HEIGHT;FILE* file = fopen(path, "rb");if (file == NULL)return NULL;fseek(file, 16, SEEK_SET);byte* data = new byte[cnt];fread(data, 1, cnt, file); return data;
}
read函数第一个参数传入Minist数据集的地址,第二个传入读取的图片张数
为什么要移动16字节,下载后我们可以看到Minist的预览图
magic_number image_number rows columns分别占了16个字节
而rows和columns我们将使用宏进行定义
main函数
int main()
{int width = BIT_WIDTH * COLUMN_COUNT * RATIO;int height = BIT_HEIGHT * ROW_COUNT * RATIO;initgraph(width, height);byte* arr = read("你的图片地址",30);int position[] = { 0,0,RATIO,RATIO };int offset[] = { 0,0 };int base[] = { 0,0,RATIO,RATIO };for (int i = 0; i < BIT_COUNT; ++i){solidrectangle(position[0], position[1], position[2], position[3]);setfillcolor(RGB(int(arr[i]), int(arr[i]), int(arr[i])));if (offset[0] >= BIT_WIDTH){position[1] += OFFSET;position[3] += OFFSET;position[0] = base[0];position[2] = base[2];offset[0] = 0;offset[1]++;}if (offset[1] >= BIT_HEIGHT * ROW_COUNT){base[0] += BIT_WIDTH * RATIO;base[2] += BIT_WIDTH * RATIO;position[0] = base[0];position[2] = base[2];position[1] = base[1];position[3] = base[3];offset[1] = 0;}position[0] += OFFSET;position[2] += OFFSET;offset[0]++;}_getch();delete[] arr;closegraph();return 0;}
宏定义
#define _CRT_SECURE_NO_WARNINGS //如果你使用的是Visual Studio
#include <graphics.h>
#include <conio.h>
#include <stdio.h>#define MAX_READCOUNTS 60000
#define BIT_WIDTH 28
#define BIT_HEIGHT 28
#define ROW_COUNT 4 //数字行数量
#define COLUMN_COUNT 5 //数字列数量
#define RATIO 2 //放大倍数
#define OFFSET 1*RATIO
#define BIT_COUNT BIT_WIDTH*BIT_HEIGHT*ROW_COUNT*COLUMN_COUNT
ROW_COUNT 输出图片的每行的数量
COLUMN_COUNT 输出图片每列的数据
RATIO 图片放大的倍数
注意!read函数读入的数量不能低于ROW_COUNT*COLUMN_COUNT
效果图
C++ 二进制读入和Minist图片展示相关推荐
- 记一次从Sql Server中图片二进制流还原回图片的开发过程
背景:最近在客户现场做项目上线时,需要数据迁移工作.客户之前用的一个BS桌面应用,其中关于图片的存储全部以二进制流的方式写入到Sql Server数据库表中的某个字段中,如下图所示,由于新开发应用采用 ...
- layUI框架表格中图片展示完整实例
一.建表,插入数据 CREATE TABLE `product` (`id` bigint(0) NOT NULL AUTO_INCREMENT,`name` varchar(64) CHARACTE ...
- MVP模式在Android中的应用之图片展示选择功能的框架设计
前言:虽然安卓出现的时间比其它平台软件比较晚,但是在我们的安卓开发中,一样可以使用我们所熟知的设计模式来给它一个合理.完善的结构,这样,才可以使我们在平常开发的时候减少冗余代码的发生,真正的提高效率. ...
- vue 时间刻度_vue时间轴风格式的图片展示
项目将近完结,在修正bug的同时,也对自己项目中代码进行回顾分析. 看回半年前写的东西,真是很多都感到陌生,所以趁着下午的空档时间总结下之前遇到的难点. 好的,先上图,目标效果 先分析 1. 上下两层 ...
- div 隐藏_CSS实现六边形Div图片展示效果
一. 效果图 二. 六边形效果涉及到的知识点 1. transform: rotate(120deg); // 元素旋转 2. overflow: hidden; // 超出隐藏 3. visibil ...
- .Net下二进制形式的文件(图片)的存储与读取 [ZT]
.Net下图片的常见存储与读取凡是有以下几种: 存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[]. 1.参数是图片路径: ...
- 如何用Jquery做图片展示效果
一. 前言 到底用JQuery做出怎样的展示效果? 让我们先来看一下!网页加载时,如图所示: 二.本人思路 这个效果初学者看起来好像有点复杂,其实不太难,关键是理清思路,从后端的数据库中找出我们要展示 ...
- 01-UIScrollView01-大图片展示
源代码下载链接:01-UIScrollView01-大图片展示.zip 283.7 KB // // MJViewController.m // 01-UIScrollView01-大图片展示 / ...
- JS特效代码大全(十一)超炫的js图片展示效果(三)
在看过上一篇JS特效代码大全(十)超炫的js图片展示效果(二)文章后,相信很多人都想试试把这种效果用到自己的项目中去了.在用的过程当中个性化的需求就来了,比如,想把小图导航放上边去,或者放左边放右边等 ...
- Image:介绍一些跟图片有关的控件,如图片展示特效,图片生产,图片保护等
栏目导航 Java开源 OPEN文档 OPEN搜索 OPEN家园 OPEN资讯 提交开源项目 A Accordion AutoComplete Animation C Calendar Charts ...
最新文章
- 【转】JPG打包压缩后比原来尺寸还大
- NC119-最小的k个数
- java文档注释生产api没有注释_一个神奇的没有springboot注释的api文档生成器---JApiDocs...
- Android studio Error occurred during initialization of VM 问题解决
- 5-python学习——条件语句
- Java 算法 约数个数
- 虹科案例 | 移动运营商:使用手持式频谱仪进行干扰检测
- Thinkphp响应式第三四方聚合支付平台源码
- [netplus]初见,Netplus快速开始之PingPong Example
- 增加客流量的方法_7种成熟的方法来增加网站流量
- 直接下载:Windows 10正式版官方原版镜像!
- Gromacs 的第一步_能量最小化
- php 关于php时区时间错误问题 date 当前时间 时差(转载)
- 2021河南高考成绩查询倒计时,距离2021年高考天数 2021高考倒计时
- sweet-alert的swal()出现瞬间自动消失(type:“success”类型)
- x86、i386、IA-32、amd64、x64、x86-64、IA-64的区别
- Android-UI开发(一)
- Makefile文件:Makefile介绍
- 【转】Azure Az-900认证 04——-考取AZ900所有知识点总结--获取证书!
- PPP精密单点定位GAMP(一)