文章目录

  • 二进制读入
  • 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图片展示相关推荐

  1. 记一次从Sql Server中图片二进制流还原回图片的开发过程

    背景:最近在客户现场做项目上线时,需要数据迁移工作.客户之前用的一个BS桌面应用,其中关于图片的存储全部以二进制流的方式写入到Sql Server数据库表中的某个字段中,如下图所示,由于新开发应用采用 ...

  2. layUI框架表格中图片展示完整实例

    一.建表,插入数据 CREATE TABLE `product` (`id` bigint(0) NOT NULL AUTO_INCREMENT,`name` varchar(64) CHARACTE ...

  3. MVP模式在Android中的应用之图片展示选择功能的框架设计

    前言:虽然安卓出现的时间比其它平台软件比较晚,但是在我们的安卓开发中,一样可以使用我们所熟知的设计模式来给它一个合理.完善的结构,这样,才可以使我们在平常开发的时候减少冗余代码的发生,真正的提高效率. ...

  4. vue 时间刻度_vue时间轴风格式的图片展示

    项目将近完结,在修正bug的同时,也对自己项目中代码进行回顾分析. 看回半年前写的东西,真是很多都感到陌生,所以趁着下午的空档时间总结下之前遇到的难点. 好的,先上图,目标效果 先分析 1. 上下两层 ...

  5. div 隐藏_CSS实现六边形Div图片展示效果

    一. 效果图 二. 六边形效果涉及到的知识点 1. transform: rotate(120deg); // 元素旋转 2. overflow: hidden; // 超出隐藏 3. visibil ...

  6. .Net下二进制形式的文件(图片)的存储与读取 [ZT]

    .Net下图片的常见存储与读取凡是有以下几种: 存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[]. 1.参数是图片路径: ...

  7. 如何用Jquery做图片展示效果

    一. 前言 到底用JQuery做出怎样的展示效果? 让我们先来看一下!网页加载时,如图所示: 二.本人思路 这个效果初学者看起来好像有点复杂,其实不太难,关键是理清思路,从后端的数据库中找出我们要展示 ...

  8. 01-UIScrollView01-大图片展示

    源代码下载链接:01-UIScrollView01-大图片展示.zip 283.7 KB // //  MJViewController.m //  01-UIScrollView01-大图片展示 / ...

  9. JS特效代码大全(十一)超炫的js图片展示效果(三)

    在看过上一篇JS特效代码大全(十)超炫的js图片展示效果(二)文章后,相信很多人都想试试把这种效果用到自己的项目中去了.在用的过程当中个性化的需求就来了,比如,想把小图导航放上边去,或者放左边放右边等 ...

  10. Image:介绍一些跟图片有关的控件,如图片展示特效,图片生产,图片保护等

    栏目导航 Java开源 OPEN文档 OPEN搜索 OPEN家园 OPEN资讯 提交开源项目 A Accordion AutoComplete Animation C Calendar Charts ...

最新文章

  1. 【转】JPG打包压缩后比原来尺寸还大
  2. NC119-最小的k个数
  3. java文档注释生产api没有注释_一个神奇的没有springboot注释的api文档生成器---JApiDocs...
  4. Android studio Error occurred during initialization of VM 问题解决
  5. 5-python学习——条件语句
  6. Java 算法 约数个数
  7. 虹科案例 | 移动运营商:使用手持式频谱仪进行干扰检测
  8. Thinkphp响应式第三四方聚合支付平台源码
  9. [netplus]初见,Netplus快速开始之PingPong Example
  10. 增加客流量的方法_7种成熟的方法来增加网站流量
  11. 直接下载:Windows 10正式版官方原版镜像!
  12. Gromacs 的第一步_能量最小化
  13. php 关于php时区时间错误问题 date 当前时间 时差(转载)
  14. 2021河南高考成绩查询倒计时,距离2021年高考天数 2021高考倒计时
  15. sweet-alert的swal()出现瞬间自动消失(type:“success”类型)
  16. x86、i386、IA-32、amd64、x64、x86-64、IA-64的区别
  17. Android-UI开发(一)
  18. Makefile文件:Makefile介绍
  19. 【转】Azure Az-900认证 04——-考取AZ900所有知识点总结--获取证书!
  20. PPP精密单点定位GAMP(一)

热门文章

  1. html js打开一个新页面跳转,js页面跳转
  2. Tomcat6 如何彻底卸载,才干净?
  3. 销售方法总结思维导图模板分享
  4. TCP 和 UDP 的区别
  5. linux hg 图形,Linux下Mercurial (hg)配置说明
  6. 听完吴声的演讲,我感觉智商梗阻了
  7. 【离散数学】「离散数学引论」学习笔记
  8. 《批判性思维》感1.1-[信念执念断言]
  9. Web服务稳定性测试 负载测试 可靠性测试 方案 测试报告
  10. Linux 安装SNMPWALK工具