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文件里

# !usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
import numpy as np


#打开本地视频文件或网络摄像头,并播放视频
def OpenAndPlayVideoFile(filename):
    try:
        print("======to start play video file...")
        #使用OpenCV自带的VideoCapture()函数定义视频文件对象,网络摄像机本质上可以看作远程网络视频文件
        cap = cv2.VideoCapture(filename)

        #打印视频参数:宽、高、每秒传输帧数
        print('width = ', cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        print('height = ', cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
        print('fps = ', cap.get(cv2.CAP_PROP_FPS))

        #循环读取每一帧
        while(cap.isOpened()):
            #第一个返回值result是一个布尔值,表示当前这一帧是否获取正确
            result, frame = cap.read()
            #读取视频文件结束时,退出播放
            if not result:
                print('play end...')
                break
            #在名称为“video file”的窗口中,显示视频
            cv2.imshow("video file", frame)
            #当按下"q"或“Q”键时,退出播放
            key = cv2.waitKey(1)
            if key == ord('q') or key == ord('Q'):
                break
        #释放视频文件或摄像头资源
        cap.release()
        #销毁所有窗口,释放资源
        cv2.destroyAllWindows()
        print("end...")
    except Exception as e:
        #访问异常的错误编号和详细信息
        print(str(e))


#打开本地摄像头,并播放视频
def OpenAndPlayLocalCamera(index):
    print("======to start play local camera...")
    #使用OpenCV自带的VideoCapture()函数定义摄像头对象,打开0号、或1号、或2号...摄像头
    cap = cv2.VideoCapture(index)

    #打印视频参数:宽、高、每秒传输帧数
    print('width = ', cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    print('height = ', cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    print('fps = ', cap.get(cv2.CAP_PROP_FPS))

    #循环读取每一帧
    while(cap.isOpened()):
        #第一个返回值result是一个布尔值,表示当前这一帧是否获取正确
        result, frame = cap.read()
        #在名称为“video file”的窗口中,显示视频
        cv2.imshow("video file", frame)
        #当按下"q"或“Q”键时,退出播放
        key = cv2.waitKey(1)
        if key == ord('q') or key == ord('Q'):
            break
    #释放视频文件或摄像头资源
    cap.release()
    #销毁所有窗口,释放资源
    cv2.destroyAllWindows()
    print("end...")

if __name__ == '__main__':
    #打开本地文件播放
    video_file = 'opencv.mp4'
    OpenAndPlayVideoFile(video_file)

    #打开本地0号摄像头播放
    OpenAndPlayLocalCamera(0)

    #打开网络摄像头播放
    url = 'rtsp://admin:123456@192.168.1.105:554/Streaming/Channels/101'
OpenAndPlayVideoFile(url)

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

#打开视频文件或网络摄像头,并播放视频
OpenAndPlayVideoFile(filename)

#打开本地摄像头,并播放视频
OpenAndPlayLocalCamera(index)

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

VS中代码截图:

4 播放效果截图

视频文件:

网络摄像头:

调试控制台输出:

5 参考

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

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值