1

このスクリプトは、ウェブカメラから写真を撮り、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)

スクリプトの実行中に Web カメラにアクセスしたい場合があるため、毎回キャプチャ キャプチャを作成しています。しかし、それは問題ではないようです。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 リポジトリの python-opencv 2.3.1-7 を使用しています。

4

0 に答える 0