• Python调用OpenCV接口播放本地视频文件、本地和网络摄像头


    1 前言

    上篇文章介绍了在WIN10系统上, C++调用OpenCV接口,播放本地视频文件、本地和网络摄像头视频。本篇我们来看一下,Python如何调用OpenCV接口,做同样的事情。

    序号

    视频来源

    视频格式/协议

    参数

    1

    本地视频文件

    MP4

    文件名称

    2

    笔记本摄像头

    摄像头序号

    3

    网络摄像头

    RTSP

    rtsp://admin:123456@192.168.1.105:554/Streaming/Channels/101

    下边我们用海康IP摄像机做测试,所以表格中的rtsp地址,是海康摄像机的URL格式,其它品牌(大华、宇视)与之类似。

    rtsp://admin:123456@192.168.1.105:554/Streaming/Channels/101

    rtsp:表示采用RTSP协议从摄像机取流

    admin:摄像机网页登录用户名

    123456:摄像机网页登录密码

    192.168.1.105:摄像机IP地址

    554:RTSP默认端口

    2 调用流程

    以播放本地视频文件为例,流程如下,详细过程请参见后边代码。

    1. 打开视频文件
    2. 查看视频参数
    3. 循环读取视频每一帧
    4. 在窗口显示视频
    5. 当按下q或Q键时,退出当前播放
    6. 释放相关资源

    3 创建测试项目

    创建测试项目、配置开发环境,具体可参考这篇文章,过程就不多说了。

    Win10+Python3.10+OpenCV4.6.0加载显示图片_chexlong的博客-CSDN博客

    这次测试项目名称play_video,VS2022种创建好的项目截图

    将下列代码编辑到play_video.py文件里

    1. # !usr/bin/env python
    2. # -*- coding: utf-8 -*-
    3. import cv2
    4. import numpy as np
    5. #打开本地视频文件或网络摄像头,并播放视频
    6. def OpenAndPlayVideoFile(filename):
    7. try:
    8. print("======to start play video file...")
    9. #使用OpenCV自带的VideoCapture()函数定义视频文件对象,网络摄像机本质上可以看作远程网络视频文件
    10. cap = cv2.VideoCapture(filename)
    11. #打印视频参数:宽、高、每秒传输帧数
    12. print('width = ', cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    13. print('height = ', cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    14. print('fps = ', cap.get(cv2.CAP_PROP_FPS))
    15. #循环读取每一帧
    16. while(cap.isOpened()):
    17. #第一个返回值result是一个布尔值,表示当前这一帧是否获取正确
    18. result, frame = cap.read()
    19. #读取视频文件结束时,退出播放
    20. if not result:
    21. print('play end...')
    22. break
    23. #在名称为“video file”的窗口中,显示视频
    24. cv2.imshow("video file", frame)
    25. #当按下"q"或“Q”键时,退出播放
    26. key = cv2.waitKey(1)
    27. if key == ord('q') or key == ord('Q'):
    28. break
    29. #释放视频文件或摄像头资源
    30. cap.release()
    31. #销毁所有窗口,释放资源
    32. cv2.destroyAllWindows()
    33. print("end...")
    34. except Exception as e:
    35. #访问异常的错误编号和详细信息
    36. print(str(e))
    37. #打开本地摄像头,并播放视频
    38. def OpenAndPlayLocalCamera(index):
    39. print("======to start play local camera...")
    40. #使用OpenCV自带的VideoCapture()函数定义摄像头对象,打开0号、或1号、或2号...摄像头
    41. cap = cv2.VideoCapture(index)
    42. #打印视频参数:宽、高、每秒传输帧数
    43. print('width = ', cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    44. print('height = ', cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    45. print('fps = ', cap.get(cv2.CAP_PROP_FPS))
    46. #循环读取每一帧
    47. while(cap.isOpened()):
    48. #第一个返回值result是一个布尔值,表示当前这一帧是否获取正确
    49. result, frame = cap.read()
    50. #在名称为“video file”的窗口中,显示视频
    51. cv2.imshow("video file", frame)
    52. #当按下"q"或“Q”键时,退出播放
    53. key = cv2.waitKey(1)
    54. if key == ord('q') or key == ord('Q'):
    55. break
    56. #释放视频文件或摄像头资源
    57. cap.release()
    58. #销毁所有窗口,释放资源
    59. cv2.destroyAllWindows()
    60. print("end...")
    61. if __name__ == '__main__':
    62. #打开本地文件播放
    63. video_file = 'opencv.mp4'
    64. OpenAndPlayVideoFile(video_file)
    65. #打开本地0号摄像头播放
    66. OpenAndPlayLocalCamera(0)
    67. #打开网络摄像头播放
    68. url = 'rtsp://admin:123456@192.168.1.105:554/Streaming/Channels/101'
    69. OpenAndPlayVideoFile(url)

    程序中实现了下边2个播放函数:

    1. #打开视频文件或网络摄像头,并播放视频
    2. OpenAndPlayVideoFile(filename)
    3. #打开本地摄像头,并播放视频
    4. OpenAndPlayLocalCamera(index)

    代码中的视频文件opencv.mp4,放置在测试项目工程当前目录,如截图:

    VS中代码截图:

    4 播放效果截图

    视频文件:

    网络摄像头:

    调试控制台输出:

    5 参考

    opencv 摄像头操作详解 - 我坚信阳光灿烂 - 博客园

  • 相关阅读:
    【附源码】Python计算机毕业设计天气预报APP
    【云原生】Docker部署数据库的持久化
    【Qt开发流程】之富文本处理
    动态内存管理
    浏览器线程
    VulnHub Alice
    平衡二叉树c语言版
    【IDEA】IntelliJ IDEA的使用2.0——结合实际场景提升工具使用
    stack&queue&priority_queue
    SQL加解密注入详解
  • 原文地址:https://blog.csdn.net/chexlong/article/details/126666013