OpenCVで時々スナップショットを撮るために3つのウェブカメラを使用しています。それらは同じ USB バスに接続されていますが、USB 帯域幅の制限により、3 つすべての接続を同時に許可することはできません (解像度を下げると、最大 2 つの同時接続が許可され、USB バスが増えません)。
このため、スナップショットを撮るたびに Web カメラの接続を切り替える必要がありますが、40 回ほど切り替えるとメモリ リークが発生します。
これは私が得るエラーです:
libv4l2: error allocating conversion buffer
mmap: Cannot allocate memory
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
Unable to stop the stream.: Bad file descriptor
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
libv4l1: error allocating v4l1 buffer: Cannot allocate memory
HIGHGUI ERROR: V4L: Mapping Memmory from video source error: Invalid argument
HIGHGUI ERROR: V4L: Initial Capture Error: Unable to load initial memory buffers.
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or
unsupported array type) in cvGetMat, file
/build/buildd/opencv-2.3.1/modules/core/src/array.cpp, line 2482
Traceback (most recent call last):
File "/home/irobot/project/test.py", line 7, in <module>
cv2.imshow('cam', img)
cv2.error: /build/buildd/opencv-2.3.1/modules/core/src/array.cpp:2482:
error: (-206) Unrecognized or unsupported array type in function cvGetMat
これは、このエラーを生成する単純なコードです。
import cv2
for i in range(0,100):
print i
cam = cv2.VideoCapture(0)
success, img = cam.read()
cv2.imshow('cam', img)
del(cam)
if cv2.waitKey(5) > -1:
break
cv2.destroyAllWindows()
VIDIOC_QUERYMENU: Invalid argument
おそらく、カメラを接続するたびにエラーが発生することは注目に値しますが、それでも使用できます.
追加情報として、これは私v4l2-ctl -V
のウェブカメラの出力です。
~$ v4l2-ctl -V
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'YUYV'
Field : None
Bytes per Line: 1280
Size Image : 614400
Colorspace : SRGB
これらのエラーの原因と修正方法を教えてください。