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

Opencv webcam script endlessly turns webcams off and on

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

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)

仍然只是让相机闪烁。我不确定要在这里更改什么。

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

cv2.waitKey(10)

找到问题了。您在 while 循环下不断启动 videocapture 对象。您应该使用在 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()