我正在使用python进行编码,现在正在使用我的网络摄像头进行测试。
(华硕KV55J | Ubuntu 14.04 | python 2.7.6(默认,2015年6月22日,17:58:13)[GCC 4.8.2] | OpenCV 版本'2.4.8')< / p>
我可以成功地从我的网络摄像头显示图像(非常简单的代码),但是当我尝试设置鼠标回调到鼠标经过图像时(也是一个非常简单的代码),有一个很大的问题,一个分段错误之后几个帧(大约需要10/20秒才能失败,但如果我对回调进行评论,它将一直有效,直到按下“Ctrl-c”)。
有谁知道为什么会这样?
我跑了这个并得到了这个错误(即使我不移动鼠标或按任何东西):
ncc@ncc-K55VJ:~/Desktop/testes_python/gui$ python a_teste_capture.py
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
Left mouse button pushed
Left mouse button pushed
Left mouse button pushed
Left mouse button pushed
Left mouse button pushed
Segmentation fault (core dumped)
我在开始时遇到的最简单的代码是:
import cv, cv2
def click_and_take_frame(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print 'Left mouse button pushed'
def main_function():
camera_device=cv2.VideoCapture(0)
frame_name="Segmentation fault (core dumped) TEST WINDOW"
cv2.namedWindow(frame_name, cv2.WINDOW_AUTOSIZE)
while 1:
(grabbed1, frame1) = camera_device.read()
frame1= cv2.cvtColor(frame1, cv2.CV_8U)
cv2.imshow(frame_name, frame1)
cv2.setMouseCallback(frame_name, click_and_take_frame)
key = cv2.waitKey(1) & 0xFF
cv2.destroyAllWindows() # Closes displayed windows
if __name__ == '__main__':
import sys
main_function()
答案 0 :(得分:0)
根据我过去的经验,当您超载机器资源时会发生此错误。
在你的情况下,有两件事可以做到这一点
while 1
也是无限循环。您可以通过在循环中移动(grabbed1, frame1) = camera_device.read()
来更正此问题,并使用while grabbed1:
,如果框架为True
,则只会运行循环。您可以阅读有关此here。cv2.setMouseCallback(frame_name, click_and_take_frame)
移到上方,然后停止浪费资源。