2016-07-13 58 views
1

我寫了使用的OpenCV和videowriter如何釋放「孤兒」的OpenCV videowriter

我打電話從腳本這個功能我Spyder的內/ IPython的IDE生成的視頻輸出功能。在調試過程中,該功能仍然存在問題,有時會在不釋放視頻文件的情況下中止。我試圖實現try/exception,但仍然有未被捕獲的實例。

每次發生這種情況時,輸出視頻文件保持鎖定狀態,例如,我無法使用Windows資源管理器刪除它,或者使用相同的文件名作爲另一個程序運行的輸出,直到關閉並重新啓動spyder ide。

有沒有辦法在不關閉IDE的情況下查找並釋放所有這些'孤立'videowriter對象?

這裏是我的代碼的虛擬例如:

import cv2 
import numpy as np 

def video_processing(path): 
    fourcc=cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') 
    fps=30 
    videoOut = cv2.VideoWriter(path,fourcc,fps,(100 ,100)) 

    #some processing: 
    for i in range(10): 
     #result=np.ones((100,100)) 
     #deliberately cause an error by providing misfit result 
     #result=np.ones((101,101)) 
     #on some systems, dtype needs to be specified as pointed out in one answer 
     result=np.ones((101,101),dtype = np.uint8) 

    videoOut.write(result) 

回答

0

正因爲如此,你的代碼給出了一個錯誤。您必須指定result = np.ones((100,100), dtype = np.uint8)才能運行。否則,你會得到一個失敗的OpenCV斷言。

即使沒有關閉控制檯,我也可以在沒有任何問題的情況下刪除視頻(我正在使用Python IDLE)。

+0

dtype = np.uint8在我的系統上是不需要的(opencv 3.0,win7 64bit上的python 2.7 64bit)。現在,當我發生錯誤時,例如通過生成對於videoWriter來說太大的結果數組,我收到一條錯誤消息,並且輸出文件被鎖定。 – jlarsch

+0

我在Windows 10 64位上使用python 2.7.11 64位OpenCV 3.1.0,並且此代碼在沒有指定'dtype'的情況下運行... @ jlarsch – Sunreef

+0

有趣。那就提出了一個不同的問題。但是返回到我的問題:如果指定了dtype,但是提供了不正確的結果數組大小,會發生什麼情況。對我來說,這可重複鎖定輸出視頻文件。 – jlarsch