如何将 csv 数据集转换为 opencv 可读的 numpy 数组?

How to convert a csv dataset to a numpy array readable by opencv?

我有一个 csv 数据集,即手语 mnist 数据集。它包含 28x28 图像的信息及其像素信息。我想将此数据集转换为 opencv3 可以读取的 numpy 数组。我可以通过 opencv 操作的 numpy 数组。我想通过 opencv 将定向梯度直方图应用到这个数据集中。

我已经成功地将它转换成一个 numpy 数组,并且能够隔离一行并将其重新整形为一个 28x28 数组。该行的开头有一个标签,我也只用 28x28 像素数据将其拆分。我已经使用 matplotlib 成功地绘制了它,但是我似乎无法在 numpy 数组上使用 cv2.imshow() 。我也知道 opencv 只能读取某些数据类型,我已经尝试将我的数据 numpy 数组转换为 int32 和 float,但它仍然没有工作。

CSV 文件如下所示: The CSV file showing the first 4 rows

这是文件: Sign Language CSV dataset

Site Where I got the Dataset[Kaggle.com - Sign Language Mnist]

第一列是图像的标签,其余是像素。它上升到像素 784 列。

这是我的代码:

import cv2

data = np.genfromtxt('sign_mnist_test.csv', delimiter=',', skip_header=1)

labels = data[1:, 0].astype(np.float)
value1 = data[0, 1:].astype(np.float) #the 1st row of the dataset

reshaped = np.reshape(value1, (28, 28))

cv2.imshow('image', reshaped)
cv2.waitKey(0)
cv2.destroyAllWindows()

第一行的 numpy 数组如下所示:

Numpy array of the 1st row

这是输出:

Output Image

我希望它显示 28x28 的训练图像(手部图像),但它只显示没有任何特征的纯白色 28x28 图像。

plt.imshow(reshaped, cmap="Greys")
plt.show()

Output using matplotlib

我正在使用 PyCharm 作为 IDE。

我也在寻找替代方案,如果有更好的解决方案,我可以将我的数据集用于 openCV。

问题是你把它变成了这条线的浮动:

value1 = data[0, 1:].astype(np.float)

您最好将 np.uint8 传递给 cv2.imshow()

我使用了调整大小而不是重塑

data = pd.read_csv("sign_mnist_train/sign_mnist_train.csv") # images of 28x28 
labels = data.label
data = data.drop(columns=["label"])
value1 = data.iloc[0].astype(np.uint8) 
reshaped = np.resize(value1, (28, 28))
cv2.imshow('image', reshaped)
cv2.waitKey(0)
cv2.destroyAllWindows()