<p>实际上,您可以使用PyPI提供的<a href="https://pypi.org/project/idx2numpy/" rel="noreferrer">idx2numpy</a>包。它的<em>非常</em>简单易用,直接将数据转换为numpy数组。
你要做的是:</p>
<h2>下载数据</h2>
<p>从<a href="http://yann.lecun.com/exdb/mnist/" rel="noreferrer">official website</a>下载MNIST数据集。<br/>
如果您使用的是Linux,那么可以使用<a href="https://www.gnu.org/software/wget/" rel="noreferrer">wget</a>从命令行本身获取它。快跑:</p>
<pre class="lang-sh prettyprint-override"><code>wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
wget http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
wget http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
wget http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
</code></pre>
<h2>解压缩数据</h2>
<p>解压缩数据。在Linux上,您可以使用<a href="https://www.gnu.org/software/gzip/" rel="noreferrer">gzip</a></p>
<p>最终,您应该拥有以下文件:</p>
<pre class="lang-sh prettyprint-override"><code>data/train-images-idx3-ubyte
data/train-labels-idx1-ubyte
data/t10k-images-idx3-ubyte
data/t10k-labels-idx1-ubyte
</code></pre>
<p>前缀<code>data/</code>只是因为我已经将它们提取到名为<code>data</code>的文件夹中。你的问题在这里之前看起来还不错,所以继续读下去。</p>
<h2>使用idx2numpy</h2>
<p>这里有一个简单的python代码,可以将解压文件中的所有内容作为numpy数组读取。</p>
<pre class="lang-py prettyprint-override"><code>import idx2numpy
import numpy as np
file = 'data/train-images-idx3-ubyte'
arr = idx2numpy.convert_from_file(file)
# arr is now a np.ndarray type of object of shape 60000, 28, 28
</code></pre>
<p>现在,您可以将它与OpenCV juts一起使用,其方式与显示任何其他图像的方式相同,例如</p>
<pre class="lang-py prettyprint-override"><code>cv.imshow("Image", arr[4])
</code></pre>
<p>要安装idx2numpy,可以使用PyPI(<code>pip</code>包管理器)。只需运行命令:</p>
<pre class="lang-sh prettyprint-override"><code>pip install idx2numpy
</code></pre>