我使用3個攝像頭偶爾在OpenCV中拍攝快照。它們連接到同一個usb總線,由於usb帶寬限制(降低分辨率允許最多2個同時連接,並且我沒有更多usb總線),它不允許同時連接所有3個連接。由於這個原因,每次我想拍攝一張快照時,我都必須切換攝像頭連接,但這會導致大約40次切換後內存泄漏。在Python中使用VideoCapture的內存泄漏OpenCV
這是我的錯誤:
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
是什麼原因導致這些錯誤,我該如何解決這些問題?
我有完全相同的問題,你發現了什麼問題? – bakalolo
您使用的是哪個版本的OpenCV?已經有一段時間了,但我相信在更新OpenCV之後問題就會停止(我認爲它是2.3.1)。 – RemiX
我正在使用2.4.12這應該是更新的方式。我可以嘗試更新到3。 – bakalolo