• 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 摄像头操作详解 - 我坚信阳光灿烂 - 博客园

  • 相关阅读:
    web安全学习笔记【11】——信息打点(1)
    震惊!阿里卷成这样?不吃饭了,上厕所、团建都要聊工作,人均上厕所小于一天三次...
    华为路由器交换机DHCP配置实例(二层、三层交换机)
    代码随想录 | Day 57 - LeetCode 647. 回文子串、516. 最长回文子序列
    多目标哈里斯鹰优化 (MOHHO)(Matlab代码实现)
    微信小程序开发源码系统集合版:含15大类别小程序功能 包升级更新
    智源社区AI周刊No.101:DeepMind推出AlphaTensor登Nature封面;stateof.ai发布AI情况报告...
    国庆day5
    【云原生】设备入云之FlexManager数据通道的具体部署
    ChatGLM-中英对话大模型-6B试用说明
  • 原文地址:https://blog.csdn.net/chexlong/article/details/126666013