mNISTデータセットがあり、pyplotを使用して視覚化しようとしています。データセットはcvs
形式で、各行は784ピクセルの1つの画像です。 28_28画像形式でpyplot
またはopencv
で視覚化したい。私は直接使用しようとしています:
plt.imshow(X[2:],cmap =plt.cm.gray_r, interpolation = "nearest")
しかし、私は機能していませんか?どのようにこれにアプローチすべきかについてのアイデア。
この形式のCSVファイルがあると仮定します。これは、MNISTデータセットが利用可能な形式です
_label, pixel_1_1, pixel_1_2, ...
_
MatplotlibでOpenCVを使用してPythonで可視化する方法は次のとおりです。
_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
_
上から_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()
_
迅速で汚い解決策を望む私のようなすべての人のために、単に与えられた入力が何であるかについて大まかなアイデアを得るために、コンソール内で、豪華なライブラリなしで:
_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
_
出力は少しゆがんでいますが、アイデアはわかります。