- 一、OpenCV3对MNIST数据集的解析
- 1.1 MNIST数据集介绍
- 1.2 小端格式和大端格式
- 1.3 小端存储转换代码示例
- 1.4 OpenCV3对图像数据的解析代码示例
- 1.5 OpenCV3对标签数据的解析代码示例
- 二、模型训练
- 2.1 训练数据准备
- 2.2 构建支持向量机SVM并进行训练
- 2.3 在测试数据集上预测训练准确率
- 2.4 运行结果
- 三、调用训练好的模型进行手写数字识别
- 3.1 代码示例
- 3.2 运行结果
关于MNIST数据集,我曾写过一篇文章进行了详细描述:https://blog.csdn.net/didi_ya/article/details/105075859 这里就不过多介绍了。 这里重点介绍一下小端格式和大端格式。
1.2 小端格式和大端格式大端模式:高位字节放在内存低地址处,低位字节放在内存高地址处;最直观,因为存地址从左到右按照由低到高的顺序写出 把值按照通常的高位到低位的顺序写出,两者对照,一个字节一个字节的填充进去 ; 小端模式:低位字节放在内存低地址处,高位字节放在内存高地址处;Intel处理器一般为小端模式,比较符合人的思维;
看个例子: 如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
大端模式小端模式0x00000x120xcd0x00010x230xab0x00020xab0x340x00030xcd0x12参考链接:https://blog.csdn.net/liuweiyuxiang/article/details/78045344
需要注意的是,MNIST数据集采用小端存储的方式,因此提取需要进行一定操作。
1.3 小端存储转换代码示例由于大端模式是把高位字节放在内存的低位处,所以,c1,c2,c3,c4依次表示的就是原来的数的高位,所以,在将c1,c2,c3,c4转化为整数后,只要依次取出整数的后8位,左移24位;次后八位,左移16位;次次后8位,左移8位;次次后8位,然后将这些左移后或者没有左移的元素相加起来就可以了。
在C++标准中,char类型的长度被定义为一个字节,这个在不同的处理器上面是不变的,因此,可以采用char类型的数组来存储文件头的部分,同时,使用char类型的数组来进行大端模式到小端模式的转换也是很容易的。
代码示例:
int reverseInt(int i) {
unsigned char c1, c2, c3, c4;
c1 = i & 255;//&——与运算;255——11111111;该语句的意思是取出i的后八位
c2 = (i >> 8) & 255;//右移8位
c3 = (i >> 16) & 255;//右移16位
c4 = (i >> 24) & 255;//右移24位
return ((int)c1
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?