OpenCV从缓冲区获取缩略图

时间:2014-02-05 18:59:03

标签: python django opencv

我正在尝试编写一个脚本,允许用户上传视频并抓取从视频第一帧制作的缩略图。我现在的脚本没有抛出任何错误,但是当缩略图被创建时,它是一个破碎的图像,只有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

1 个答案:

答案 0 :(得分:1)

您的代码有错误。

read()返回一个元组(retval,image),因此将第3行更改为:

hello, img = cap.read()