我的代码:
import cv2
cap = cv2.VideoCapture(0)
cv2.namedWindow('frame', cv2.WINDOW_NORMAL)
while True:
key = cv2.waitKey(0) & 0xFF
ret, frame = cap.read()
cv2.imshow('frame', frame)
if key == ord('q'):
cap.release()
cv2.destroyAllWindows()
break
if key == ord('c'):
cv2.imwrite('capture.jpg', frame)
cap.release()
cv2.destroyAllWindows()
>我运行此代码.
>显示灰色显示.
>我将相机对准一个物体,然后按“c”键.
>它不显示对象图像,而是显示运行代码时相机指向的图像并保存.
>我将相机对准其他地方并按’c’键.
>它显示了它在3处看到的物体的图像并保存.
相机滞后一步.为什么?
最佳答案 这可能与缺少cv :: waitKey(0)有关,并且窗口没有得到更新,尽管这很奇怪.
尝试在imshow之后添加一个cv :: waitKey命令
import cv2
cap = cv2.VideoCapture(0)
cv2.namedWindow('frame', cv2.WINDOW_NORMAL)
while True:
key = cv2.waitKey(0) & 0xFF
ret, frame = cap.read()
cv2.imshow('frame', frame)
cv2.waitKey(0)
if key == ord('q'):
cap.release()
cv2.destroyAllWindows()
break
if key == ord('c'):
cv2.imwrite('capture.jpg', frame)
cap.release()
cv2.destroyAllWindows()
我认为这可能是因为当你执行imwrite时,你有效地打破了while循环(尽管稍微)用opencv做其他事情.