如何使用 opencv 打开 pkl 文件?



我在"somefile"中有一个 pkl 文件的文件夹,我需要用 opencv 作为视频打开,但我不断收到_pickle.UnpicklingError: unpickling stack underflow错误。我做错了什么?我知道我的代码不漂亮...请不要烤我哈哈

import cv2 import os import pickle import numpy as np
subdir ='somefile' files = os.listdir(subdir)
# open pkl filesfor f in files:
with open(subdir + '/' + f, 'rb') as infile:
try:
unpickled_videos = pickle.load(infile)
for video in unpickled_videos:
print('{} has been unpickled'.format(os.path.abspath(video)))
# play video from file
for video in unpickled_videos:
if video == 'eye':
# create VideoCapture object, read from input file
cap = cv2.VideoCapture('eye' + '.mp4')
# check if camera opened successfully
if (cap.isOpened() == False):
print("Error opening {}".format(os.path.abspath(video)))
# convert resolutions from float to integer
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
fps = cap.get(cv2.cv.CV_CAP_PROP_FPS)
# define codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter(video + '.MP4', fourcc, fps, (frame_width, frame_height), True)
# read until video is completed
while True:
# capture frame-by-frame
ret, frame = cap.read()
# display resulting frame
cv2.imshow('frame', frame)
# press Q on keyboard to exit
if cv2.waitKey(0) & 0xFF == ord('q'):
break
except FileNotFoundError:
print('{} not found!'.format(f))
pass
except EOFError:
print('End of file error')
pass 
#when everything done, release video capture object and close all frames 
#cap.release() out.release() cv2.destroyAllWindows()

您可以尝试将其加载为 numpy 数组:

import numpy as np 
data = np.load(input_filename, allow_pickle=True)

该错误听起来可能是您的数据问题。如果您的某些数据有问题,您可以将调用包装在 try/except 中。

最新更新