web-dev-qa-db-ja.com

OpenCVまたはMatplotlib / Pyplotを使用してMNISTデータセットを視覚化する

mNISTデータセットがあり、pyplotを使用して視覚化しようとしています。データセットはcvs形式で、各行は784ピクセルの1つの画像です。 28_28画像形式でpyplotまたはopencvで視覚化したい。私は直接使用しようとしています:

plt.imshow(X[2:],cmap =plt.cm.gray_r, interpolation = "nearest") 

しかし、私は機能していませんか?どのようにこれにアプローチすべきかについてのアイデア。

10
decipher

この形式のCSVファイルがあると仮定します。これは、MNISTデータセットが利用可能な形式です

_label, pixel_1_1, pixel_1_2, ...
_

MatplotlibでOpenCVを使用してPythonで可視化する方法は次のとおりです。

Matplotlib/Pyplot

_import numpy as np
import csv
import matplotlib.pyplot as plt

with open('mnist_test_10.csv', 'r') as csv_file:
    for data in csv.reader(csv_file):
        # The first column is the label
        label = data[0]

        # The rest of columns are pixels
        pixels = data[1:]

        # Make those columns into a array of 8-bits pixels
        # This array will be of 1D with length 784
        # The pixel intensity values are integers from 0 to 255
        pixels = np.array(pixels, dtype='uint8')

        # Reshape the array into 28 x 28 array (2-dimensional array)
        pixels = pixels.reshape((28, 28))

        # Plot
        plt.title('Label is {label}'.format(label=label))
        plt.imshow(pixels, cmap='gray')
        plt.show()

        break # This stops the loop, I just want to see one
_

enter image description here

OpenCV

上から_dtype='uint8'_(符号なし8ビット整数)および形状28 x 28のpixels numpy配列を取得し、cv2.imshow()でプロットできます。

_    title = 'Label is {label}'.format(label=label)

    cv2.imshow(title, pixels)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
_
28
bakkal

迅速で汚い解決策を望む私のようなすべての人のために、単に与えられた入力が何であるかについて大まかなアイデアを得るために、コンソール内で、豪華なライブラリなしで:

_def print_greyscale(pixels, width=28, height=28):
    def get_single_greyscale(pixel):
        val = 232 + round(pixel * 23)
        return '\x1b[48;5;{}m \x1b[0m'.format(int(val))

    for l in range(height):
        line_pixels = pixels[l * width:(l+1) * width]
        print(''.join(get_single_greyscale(p) for p in line_pixels))
_

(入力は_[784]_のように整形され、0から1までの浮動小数点値を想定しています。どちらでもない場合は、簡単に変換できます(例:pixels = pixels.reshape((784,))または_pixels \= 255_

Output

出力は少しゆがんでいますが、アイデアはわかります。

4
cpury