为什么在循环中使用OpenCV的QueryFrame会不断增加内存中的内存?

时间:2012-09-06 10:06:35

标签: python opencv

此脚本从网络摄像头拍摄照片并每小时保存一次:

import cv
import time

def f():
    camera = cv.CreateCameraCapture(0)
    time_ = time.strftime("%Y-%m-%d_%H:%M:%S")
    frame = cv.QueryFrame(camera)
    cv.SaveImage("%s.png" % time_, frame)

while True:
    f()
    time.sleep(3600)

我每次都在创建捕获捕获,因为我可能希望在脚本运行时访问网络摄像头。但这似乎不是问题所在。 QueryFrame只是不断增加内存。函数退出后不会收集垃圾。通过搜索,我找到了OpenCV Python QueryFrame function leaks memory并尝试了这一点:

def f():
    global n
    camera = cv.CreateCameraCapture(0)
    time_ = time.strftime("%Y-%m-%d_%H:%M:%S")
    frame = cv.QueryFrame(camera)
    if n == 1:
        image = cv.CreateImageHeader(cv.GetSize(frame), frame.depth,
                frame.channels)
        n = 2
    cv.SetData(frame, image)
    cv.SaveImage("%s.png" % time_, image)

但它给出了这个错误:

Traceback (most recent call last):
  File "log_webcam.py", line 20, in <module>
    f()
  File "log_webcam.py", line 17, in f
    cv.SaveImage("%s.png" % time_, image)
TypeError: IplImage argument 'image' has no data

编辑:我正在使用ubuntu repo的python-opencv 2.3.1-7。

0 个答案:

没有答案