【问题标题】:How to convert a csv dataset to a numpy array readable by opencv?如何将 csv 数据集转换为 opencv 可读的 numpy 数组?
【发布时间】:2019-11-25 08:54:30
【问题描述】:

我有一个 csv 数据集,即手语 mnist 数据集。它包含 28x28 图像的信息及其像素信息。我想将此数据集转换为可以由 opencv3 读取的 numpy 数组。一个numpy数组,我可以通过opencv进行操作。我想通过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。

【问题讨论】:

  • 请提供足够的数据,以便我们可以运行您的代码...足够的 CSV 行数。
  • 我添加的图片有望提供足够的数据。
  • 我们无法从图像中读取数字!!!
  • csv 给出了每个像素颜色值的信息。我尝试使用 cv2.imread() 读取图像并将其打印在控制台中,它会输出一个带有颜色值的 numpy 数组。我将发布一张图片,我可以在其中使用 matplotlib 绘制它并输出图像。
  • 我的意思是您提供了 CSV 文件的图片,我们无法读取,我们需要文本文件而不是图像文件。谢谢。

标签: python-3.x csv computer-vision opencv3.0 numpy-ndarray


【解决方案1】:

问题是你在这条线上做了一个浮点数:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多