我正在为OpenCV 2.2.0使用Python接口。下面的代码可以正确地从视频文件中抓取帧:
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?
谢谢。
发布于 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)
然后开始循环并设置数据:
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)https://stackoverflow.com/questions/5318311
复制相似问题