此脚本从网络摄像头拍摄照片并每小时保存一次:
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。