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

标签 python opencv

我的代码:

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 步。为什么?

最佳答案

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

关于python - 为什么 cv2.imwrite 滞后 1 步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49424010/

相关文章:

python - 如果行在 Pandas 中包含特定值,则删除列

python - 即使字段存在,PyDICOM也会返回KeyError

python - 在 python (OpenCV) 中加速与傅立叶相关的变换计算

image - 如何在 JavaCV 中实现 PSNR?

c++ - 为什么 OpenCV 拒绝 cvLoadImage ("string.ext"),但接受 cvLoadImage(argv[1])?

python - Tensorflow 2.1.0错误,模块 'tensorflow'没有属性 'GraphKeys'

python - 正则表达式匹配小于 500 英尺的字符串中的小数位

python - 使用 POST 从 Python 脚本发送文件

android - OpenCV for Android - 初始化矩阵

Python numpy 如何将这个数组/图像列表 reshape 为拼贴画?