1

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

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 函数会泄漏内存,并尝试这样做:

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。

4

0 回答 0