广告
返回顶部
首页 > 资讯 > 后端开发 > Python >OpenCV调用USB摄像头/相机,并解决1080p下的延迟卡顿问题(附Python代码)
  • 597
分享到

OpenCV调用USB摄像头/相机,并解决1080p下的延迟卡顿问题(附Python代码)

pythonopencv计算机视觉 2023-09-04 11:09:46 597人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 1. 加载摄像头2. 高分辨率视频流延迟问题3. 延迟解决方案 1. 加载摄像头 首先直接放上一段加载USB相机的例程供参考 #!/usr/bin/env python# -

文章目录

1. 加载摄像头

首先直接放上一段加载USB相机的例程供参考

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time     : 2023/5/16 10:22# @Author   : Chenan_Wang# @File     : cv_test.py# @Project  : pad_det # @Software : PyCharmimport cv2 as cvif __name__ == "__main__":    cap = cv.VideoCapture()    cap.open(1, cv.CAP_DSHOW)       # 我这里0为电脑自带摄像头,1为外接相机    while True:        if not cap.isOpened():            print('can not open camera')            break        ret, frame = cap.read()     # 读取图像        if not ret:                 # 图像读取失败则直接进入下一次循环            continue        cv.namedWindow("cv_test")        cv.imshow('cv_test', frame)        my_key = cv.waiTKEy(1)        # 按q退出循环,0xFF是为了排除一些功能键对q的ASCII码的影响        if my_key & 0xFF == ord('q'):            break    #释放资源    cap.release()    cv.destroyAllwindows()

2. 高分辨率视频流延迟问题

摄像头成功加载出来,但是默认分辨率太低(我的相机支持的是1080p),通过如下代码设置分辨率和帧率:

cap.set(cv.CAP_PROP_FRAME_WIDTH, 1920)cap.set(cv.CAP_PROP_FRAME_HEIGHT, 1080)cap.set(cv.CAP_PROP_FPS, 30)

此时分辨率是1080p了,但是延迟严重,在网上找了一堆方法,几乎都不可用!!!

  • 设置格式为MJPG:
cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc('M', 'J', 'P', 'G'))

==> 无法解决问题,依然有延迟

  • 开启多线程接受图像信息,依然无法解决问题,延迟依旧

  • 发现修改为低分辨率的时候卡顿会降低,推测可能是由于分辨率太高导致的延迟现象,但是理论上来说这点算力对计算机是没影响的,结果在修改分辨率的时候突然问题就解决了 ↓


3. 延迟解决方案

设置分辨率的时候不要设置为1920x1080,改成1900x1080!,实际成像依然会匹配相机的1920x1080,保存的时候也是1920x1080

而且画面会和之前cv默认分辨率的帧率一样,及其流畅,几乎无延迟

具体啥愿意就不知道了,希望有大佬可以解答一下~

下面放上完整代码供参考:

#!/usr/bin/env Python# -*- coding: utf-8 -*-# @Time     : 2023/5/16 10:22# @Author   : Chenan_Wang# @File     : cv_test.py# @Project  : pad_det # @Software : PyCharmimport cv2 as cvif __name__ == "__main__":    cap = cv.VideoCapture()    cap.open(1, cv.CAP_DSHOW)       # 我这里0为电脑自带摄像头,1为外接相机    cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc('M', 'J', 'P', 'G'))    cap.set(cv.CAP_PROP_FRAME_WIDTH, 1900)      # 解决问题的关键!!!    cap.set(cv.CAP_PROP_FRAME_HEIGHT, 1080)    cap.set(cv.CAP_PROP_FPS, 30)    while True:        if not cap.isOpened():            print('can not open camera')            break        ret, frame = cap.read()     # 读取图像        if not ret:                 # 图像读取失败则直接进入下一次循环            continue        cv.namedWindow("cv_test")        cv.imshow('cv_test', frame)        my_key = cv.waitKey(1)        # 按q退出循环,0xFF是为了排除一些功能键对q的ASCII码的影响        if my_key & 0xFF == ord('q'):            break    #释放资源    cap.release()    cv.destroyAllWindows()

来源地址:https://blog.csdn.net/Arcann/article/details/130702778

--结束END--

本文标题: OpenCV调用USB摄像头/相机,并解决1080p下的延迟卡顿问题(附Python代码)

本文链接: https://www.lsjlt.com/news/393408.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作