【问题标题】:Append multiple training data npy files to one npy file将多个训练数据 npy 文件附加到一个 npy 文件
【发布时间】:2019-04-16 04:57:16
【问题描述】:

我有许多 .npy 文件,其中包含在第一列图像中,在第二列中另一个列表是一个选择([1,0,0] 或 [0,1,0] 或 [0,0, 1])。我每 50 帧保存一次 - 将它们相应的选择保存到 .npy 文件中,现在当我训练将它们全部附加到一个 .npy 文件并保存时,然后尝试在新的 .npy 文件上运行 for 循环以查看图像(出于调试目的 - 看看它是否有效),它会引发错误:

  File "<ipython-input-8-24f0dc711e53>", line 6, in <module>
    cv2.imshow('test', img)

TypeError: mat data type = 17 is not supported

这是我的合并代码:

starting_value = 1;
train_data = np.load('training_data-{}.npy'.format(starting_value))
train_data_arr = []

# Merge all our training data files into one file
def merge_training_data():
    # load training data from pc
    while True:
        file_name = 'training_data-{}.npy'.format(starting_value)
        if os.path.isfile(file_name):
            train_data_arr.append(np.load(file_name))
            starting_value += 1
        else:
            print('File does not exist, finished merging!',starting_value)
            train_data_arr = np.array(train_data_arr)
            np.save(file_name, train_data_arr)
            break

还有我的测试:

#testing
starting_value = 4;
train_data = np.load('training_data-{}.npy'.format(starting_value))            
for data in train_data:
    img = data[0]
    choice = data[1]
    cv2.imshow('test', img)
    print(choice)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break

如果有帮助,我的 var explorer:

【问题讨论】:

  • 当您说“图像”时,您的具体意思是什么?它们是如何存储的?如果您加载“未合并”的训练数据文件之一,您的测试代码是否有效?
  • 看看这个,可能有帮助:stackoverflow.com/questions/41732836/…

标签: python numpy cv2


【解决方案1】:

错误取决于您使用的图像格式。这是related answer

您可以在此处找到 OpenCV 类型的列表。 type = 17 表示您的 图像是 CV_8SC3,也就是 char 的 3 通道矩阵。然而,门槛 仅接受(单通道、8 位或 32 位浮点)。哪个 表示类型必须是 CV_8UC1 或 CV_32FC1。检查形状 和你的img的dtype,并根据需要调整img。

我也看到过类似的错误,因为它需要 mat 格式,但您没有先将其读取到 mat,这可能会导致它从您的错误中假定 dtype17,而实际上类型正确,您只需要在显示之前阅读 img。

试试这个:

#testing
starting_value = 4;
train_data = np.load('training_data-{}.npy'.format(starting_value))            
for data in train_data:
    img = cv2.imread(data[0])
    choice = data[1]
    cv2.imshow('test', img)
    print(choice)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break

可能是当你保存这些图像时,它们的格式是正确的,但在重新加载后丢失了它们的类,所以你需要在使用它们之前告诉 Python 它们是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2021-12-13
    • 2020-05-24
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多