首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV Python QueryFrame函数内存泄漏

OpenCV Python QueryFrame函数内存泄漏
EN

Stack Overflow用户
提问于 2011-03-16 05:29:49
回答 1查看 1.1K关注 0票数 3

我正在为OpenCV 2.2.0使用Python接口。下面的代码可以正确地从视频文件中抓取帧:

代码语言:javascript
复制
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)

然而,随着我处理更多的视频帧,内存消耗也在不断增加。根据OpenCV文档,我们不需要为cv.QueryFrame获取的图像数据释放内存。这仍然是正确的吗?我尝试了"del frameL“和"del frameR",但没有解决问题。在这个特定的函数中,OpenCV的Python包装器中是否存在bug?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-03-16 23:28:46

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

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

代码语言:javascript
复制
cv.SetData(frameL, imageL)
cv.SetData(frameR, imageR)

所以就像这样

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5318311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档