我写了一个脚本来显示我的网络摄像头的深度图:
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)
它仍然只是打开和关闭相机。我不知道在这里要改变什么。
答案 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)