python – 为什么cv2.imwrite滞后1步?

我的代码:

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做其他事情.

点赞