我有很多.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
答案 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它们是什么。