背景:
将含有字符串的list存入txt, ‘wb’和’rb’均为以二进制的方法写入和读取,所以在读取后的这个list中的元素都是为二进制的, 如b’/data/…/Out_0043.bmp’,前面有个b;这种目录给cv2.imread读取就会报错SystemError: returned NULL without setting an error
import pickle
with open('/data/.../train_set.txt','wb') as fp:
pickle.dump(train_video_dir,fp)
with open('/data/.../train_set.txt','rb') as fp:
train_video_dir=pickle.load(fp)
解决:
把目录转换一下就好了
case_dir=b'/data/.../Out_0043.bmp'
case_dir=case_dir.decode('ascii')
不过在多个服务器中测试了,ubuntu 18.04 + base python 3.7就算没有转换也是没有问题的,但到了ubuntu + base python 2.7就出现这样的问题了;当然以上操作都是在python 3.6 + opencv 4.1 相同版本的虚拟环境下进行的;目前导致错误不同结果原因未知