从mnist官网下载下来的mnist手写数据集是二进制文件流格式的,不能直接查看,如果需要查看,需要将二进制文件转化为jpg格式,可以用各种编程语言实现,如MATLAB、Python、C++等,本文是使用C++在Ubuntu 16.04操作系统下实现的,过程中出现许多问题,现记录如下:
1、问题描述
编译时出现一下错误
no matching function for call to std::basic_ifstream<char>::(std::string&)
原因:根据提示可以看出是读取文件ifstream时出现了问题,查找资料后知道是由于不同版本c++表达不同导致的,所以用g++编译器编译时要显式制定使用那个版本c++,本程序使用c++11,编译指令如下:
g++ -o b.out -std=c++11 mnist_bin2jpg2.cpp
2、问题:
编译时出现:
对‘cv::Mat::copySize(cv::Mat const&)’未定义的引用
原因:编译的时候没有链接到库文件,这样导致函数没有定义,所以变异的时候要手动链接到库文件
g++ -o b.out -std=c++11 mnist_bin2jpg2.cpp `pkg-config opencv --cflags --libs`
3、问题:
用ifstream读取文件时编译通过了,但是一直没有成功读取文件,一开始以为是因为文件夹包含有中文的原因,然后就用了只有英文名字的文件夹,仍就没有成功,找了很久,最后发现是自己文件名打错了(哭晕在厕所。。。)
最后附上网上找的再通过修改成功将mnist转为JPG图片的代码
#include <iostream>
#include <fstream>
#include "opencv2/core/core.hpp"
#include "opencv2/h