CV2:尝试拍照时出现“[WARN:0] terminating async callback”
Posted
技术标签:
【中文标题】CV2:尝试拍照时出现“[WARN:0] terminating async callback”【英文标题】:CV2: "[ WARN:0] terminating async callback" when attempting to take a picture 【发布时间】:2019-05-22 04:01:26 【问题描述】:我正在尝试使用 python 从默认 carmera 拍照,为此我使用 openCV(来自 python shell 的import cv2
)。但是,当我尝试禁用相机时,它会关闭但出现错误[ WARN:0] terminating async callback
。
这是我正在尝试运行的代码:
import cv2
camera_port = 0
camera = cv2.VideoCapture(camera_port)
return_value, image = camera.read()
cv2.imwrite("image.png", image)
camera.release() # Error is here
代码输出所需的结果 - 它需要保存图像,但我不明白为什么会出现错误消息或如何删除它
【问题讨论】:
对于正在寻找原因的人来说,正如 Aprajita Verma 所提到的,网络摄像头的句柄没有被释放,这会导致错误。我在 OCR 应用程序的代码中使用了条件内外的网络摄像头。释放句柄时,不会发生错误。 【参考方案1】:嘿伙计们找到了解决方案 pip install opencv-contrib-python==3.4.7.28 尝试这样我们必须特别说明版本尝试较小的版本我的是 4.x 所以我做了并且没有弹出错误
【讨论】:
【参考方案2】:我也有同样的警告。
只需将camera = cv2.VideoCapture(camera_port)
行修改为camera = cv2.VideoCapture(camera_port, cv2.CAP_DSHOW)
并添加cv2.destroyAllWindows()
作为代码的最后一行。
【讨论】:
此解决方案有效,但改为定义端口cv2.VideoCapture(0, cv2.CAP_DSHOW)
在 Windows 上使用 cv2.CAP_DSHOW
会消除警告,但会降低帧速率从 30fps 到 7fps。
正确答案,不知道为什么,但是提到第二个参数可以解决警告
天哪!非常感谢!
@PeterWood Windows 上的默认设置应该没问题(CAP_MSMF
),假设你的 Win10 是最新的。在 Win10 20H2 上,我没有遇到任何问题(该警告仅表示流结束)。我团队中唯一有问题的人是使用过时的 Windows 版本。这是有道理的,因为 DSHOW 曾经是默认设置,而 MSMF 正在慢慢取代 DSHOW【参考方案3】:
camera = cv2.VideoCapture(camera_port, cv2.CAP_DSHOW) # Added cv2.CAP_DSHOW
return_value, image = camera.read()
cv2.imwrite("image.png", image)
camera.release()
cv2.destroyAllWindows() # Handles the releasing of the camera accordingly
【讨论】:
【参考方案4】:-
首先:添加
cv2.destroyAllWindows()
第二个:你已经禁止的摄像头权限,然后检查一下。
【讨论】:
【参考方案5】:它对我有用 Sumit Kumar
camera_port = 0
#camera = cv2.VideoCapture(camera_port)
camera = cv2.VideoCapture(camera_port,cv2.CAP_DSHOW)
# Check if the webcam is opened correctly
if not camera.isOpened():
raise IOError("Cannot open webcam")
return_value, image = camera.read()
print("We take a picture of you, check the folder")
cv2.imwrite("image.png", image)
camera.release() # Error is here
cv2.destroyAllWindows()
【讨论】:
【参考方案6】:camera = cv2.VideoCapture(camera_port,cv2.CAP_DSHOW)
cv2.destroyAllWindows()
【讨论】:
使用 cv2.CAP_DSHOW 可以消除警告,但在 Windows 上将帧速率从 30fps 降低到 7fps【参考方案7】:我这样做了,之后我没有看到那个警告。(仅适用于 Windows 操作系统)
打开 cmd 并输入:
setx OPENCV_VIDEOIO_PRIORITY_MSMF 0
【讨论】:
【参考方案8】:它可能会显示警告,因为您没有松开网络摄像头的手柄。
尝试将其添加到代码的末尾
camera.release()
cv2.destroyAllWindows()
我希望这会有所帮助!
【讨论】:
在带有 Python 3.8 和 OpenCV 4.2 的 Windows 10 上,这并不能解决问题。该警告也会显示在 OpenCV 示例程序上,例如samples/python/video.py
.以上是关于CV2:尝试拍照时出现“[WARN:0] terminating async callback”的主要内容,如果未能解决你的问题,请参考以下文章
使用修改的 flashMode 属性拍照时出现 React-Native-Camera 错误
在 Jetson Nano 上安装 OpenCV 4.1.2 时出现问题。导入 cv2,没有名为“cv2”的模块