我正在尝试编写一个脚本,允许用户上传视频并抓取从视频第一帧制作的缩略图。我现在的脚本没有抛出任何错误,但是当缩略图被创建时,它是一个破碎的图像,只有13b,我希望它至少是几kb。
f = request.FILES['media-video']
cap = cv2.VideoCapture(f.read())
img = cap.read()
thumb_buf = StringIO.StringIO()
thumb_buf.write(img)
content = thumb_buf.getvalue()
blob_service.put_blob('vid-thumbnail', thumbnail_name, content, x_ms_blob_type='BlockBlob')
thumb_buf.close()
cap.release()
如果我cap = cv2.VideoCapture(f)
代替f.read()
我收到错误an integer is required
。
如果我使用cv2.imencode('.png', img[1])
将图片写入缓冲区而不是使用StringIO
,则会收到错误opencv/modules/highgui/src/loadsave.cpp:429: error: (-215) code in function imencode
关于脚本为什么会创建损坏的缩略图图像的任何想法?
编辑:问题似乎与VideoCapture(f.read())
有关。 img在写入StringIO之前返回None
。
答案 0 :(得分:1)
您的代码有错误。
read()
返回一个元组(retval,image),因此将第3行更改为:
hello, img = cap.read()