OpenCV Python QueryFrame函数泄漏内存

时间:2011-03-15 21:29:49

标签: python video opencv

我正在使用Python的{​​{1}}界面。以下代码可正常用于从视频文件中抓取帧:

OpenCV 2.2.0

然而,随着我处理更多视频帧,内存消耗不断增加。根据OpenCV文档,我们不需要为for f in range(1, frameCount): # grab the left and right frames frameL = cv.QueryFrame(videoL) frameR = cv.QueryFrame(videoR) # create the image for the first frame if f==1: imageL = cv.CreateImage(cv.GetSize(frameL), frameL.depth, frameL.channels) imageR = cv.CreateImage(cv.GetSize(frameR), frameR.depth, frameR.channels) # update the images cv.Copy(frameL, imageL) cv.Copy(frameR, imageR) 获取的图像数据释放内存。这仍然是正确的吗?我试过“del frameL”和“del frameR”,但它没有解决问题。在这个特定的函数中,OpenCV的Python包装器中是否存在错误?

感谢。

1 个答案:

答案 0 :(得分:1)

您应该为两个图像分配一次内存:    imageL = cv.CreateImageHeader(cv.GetSize(frameL),frameL.depth,frameL.channels)    imageR = cv.CreateImageHeader(cv.GetSize(frameR),frameR.depth,frameR.channels)

然后开始循环并设置数据:

cv.SetData(frameL, imageL)
cv.SetData(frameR, imageR)

类似

for f in range(1, frameCount):
    # grab the left and right frames
    frameL = cv.QueryFrame(videoL)
    frameR = cv.QueryFrame(videoR)
    # create the image for the first frame
    if f==1:
        imageL = cv.CreateImageHeader(cv.GetSize(frameL), frameL.depth, frameL.channels)
        imageR = cv.CreateImageHeader(cv.GetSize(frameR), frameR.depth, frameR.channels)
    # update the images
    cv.SetData(frameL, imageL)
    cv.SetData(frameR, imageR)