将多个训练数据npy文件附加到一个npy文件

时间:2019-04-11 07:20:02

标签: python numpy cv2

我有很多.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资源管理器是否有帮助: enter image description here

1 个答案:

答案 0 :(得分:0)

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

  

您可以在此处找到OpenCV类型的列表。类型= 17表示您的   图像是CV_8SC3,又称3通道char矩阵。但是,阈值   仅接受(单通道,8位或32位浮点)。哪一个   表示类型必须为CV_8UC1或CV_32FC1。检查形状   和img的dtype,然后根据需要调整img。

我也看到了类似的错误,因为它期望使用mat格式,但是您没有先将其读取为mat,这可能导致它假定dtype是{{1} },因为实际上类型正确,您只需在显示前先阅读img。

尝试一下:

17

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