我正在尝试编写一个脚本,该脚本允许用户上传视频并获取从视频第一帧制作的缩略图。我现在拥有的脚本没有引发任何错误,但是创建缩略图时,它是损坏的图像,只有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
。
最佳答案
您的代码中有一个错误。read()
返回一个元组(retval,图像),因此将第3行更改为:
hello, img = cap.read()
关于python - OpenCV从缓冲区获取缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586114/