【问题标题】:Why cv2.imwrite lags 1 step?为什么 cv2.imwrite 滞后 1 步?
【发布时间】:2018-03-22 08:41:50
【问题描述】:

我的代码:

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()
  1. 我运行这段代码。
  2. 它显示灰色显示。
  3. 我将相机对准一个物体,然后按“c”键。
  4. 它显示的不是对象图像,而是我运行代码时相机指向的图像,然后保存。
  5. 我将相机对准其他地方,然后按“c”键。
  6. 它显示它在 3. 看到的对象的图像并保存它。

相机滞后 1 步。为什么?

【问题讨论】:

  • 图像将在 waitKey 命令期间显示,而不是之前。所以你在上一张图片的waitKey期间按c,然后下一帧就会被读写n+显示。
  • 所以只需将您的 waitKey 行移到 imshow 行之后,恕我直言,它应该可以按预期工作。

标签: python opencv


【解决方案1】:

这可能与缺少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 执行其他操作。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2017-07-13
    • 2017-11-17
    • 2021-05-29
    • 2020-04-21
    • 1970-01-01
    • 2020-12-13
    • 2020-02-27
    • 1970-01-01
    相关资源
    最近更新 更多