2016-07-13 32 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