Opencv网络摄像头脚本无休止地关闭和打开网络摄像头

时间:2016-09-21 05:21:34

标签: python opencv video webcam depth

我写了一个脚本来显示我的网络摄像头的深度图:

cam_a = int(sys.argv[1])
cam_b = int(sys.argv[2])


while True:
    imgl = cv2.VideoCapture(cam_a).read()[1]
    imgL = cv2.cvtColor(imgl, cv2.COLOR_BGR2GRAY)

    imgr = cv2.VideoCapture(cam_b).read()[1]
    imgR = cv2.cvtColor(imgr, cv2.COLOR_BGR2GRAY)


    stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET,ndisparities=16, SADWindowSize=15)
    disparity = stereo.compute(imgL,imgR)

    cv2.imshow('Disparity', disparity)

虽然它没有给我一个错误,但它会让我的网络摄像头一直闪烁,无休止地闪烁。我担心这可能会破坏我的网络摄像头,我怎么能阻止它呢?

修改

所以,我更改了它,只显示一个摄像头作为普通视频:

while True:
    imgl = cv2.VideoCapture(cam_a).read()[1]
    imgL = cv2.cvtColor(imgl, cv2.COLOR_BGR2GRAY)

    #imgr = cv2.VideoCapture(cam_b).read()[1]
    #imgR = cv2.cvtColor(imgr, cv2.COLOR_BGR2GRAY)


    #stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET,ndisparities=16, SADWindowSize=15)
    #disparity = stereo.compute(imgL,imgR)

    cv2.imshow('Disparity', imgL)
    cv2.waitKey(10)

仍然只是打开和关闭相机。我不知道在这里要改变什么。

2 个答案:

答案 0 :(得分:2)

遇到了问题。您正在while循环下不断启动视频捕捉对象。您应该使用while循环之前启动的一个实例,并使用该视频捕获实例访问图像。请参阅此示例并相应地更改您的代码,希望它能解决您的问题:

import cv2
camera = cv2.VideoCapture(0)
while True:
    return_value,image = camera.read()
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    cv2.imshow('image',gray)
    if cv2.waitKey(1)& 0xFF == ord('s'):
        cv2.imwrite('test.jpg',image)
        break
camera.release()
cv2.destroyAllWindows()

答案 1 :(得分:0)

您需要在imshow之后添加延迟:

cv2.waitKey(10)