2014-02-05 173 views
0

我正在嘗試編寫一個腳本,允許用戶上傳視頻並抓取視頻第一幀製作的縮略圖。我現在所用的腳本不會引發任何錯誤,但是當創建縮略圖時,它是一個破碎的圖像,只有13b,我希望它至少有幾個kb。OpenCV從緩衝區獲取縮略圖

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())。在它寫入到StringIO之前,img會返回None

+0

擺脫StringIO的的,這是偉大的字符串,但壞的二進制信息。我想,你想要[imencode](http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#imencode)在第一個地方 – berak

回答

1

您的代碼有一個錯誤。

read()返回一個元組(RETVAL,圖像),所以變線3:

hello, img = cap.read() 
+0

沒有錯誤被拋出,但這樣做會創建一個圖像0b 13b – Hat

+0

我注意到你的發佈代碼仍然包含錯誤。嘗試修復按照我的答案... –