1 前言

上篇文章介绍了用 C++调用OpenCV接口,打开网络摄像头录制视频,并抓拍截图。本篇我们看一下,Python如何调用OpenCV接口,来做同样的事情。

视频来源

视频格式/协议

参数

网络摄像头

RTSP

rtsp://admin:123456@192.168.1.104: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.104:摄像机IP地址

554:RTSP默认端口

输出文件

格式

文件名称

录像文件

mp4

output.mp4

抓拍图片文件

bmp

picture_x.bmp

2 关键接口说明

在测试程序中,主要用到了OpenCV以下接口:

录制视频

VideoWriter:写视频文件类,录制视频文件时使用

测试程序中,用到cv2的VideoWriter函数,调用方式如下:

cv2.VideoWriter(recordFile, fourcc, int(videoFps), (int(videoWidth),int(videoHeight)), True)

参数说明:

filename:保存的录像文件路径及名字,本例中为recordFile

fourcc指定视频编码器,注意如果想保存mp4格式的录像文件,需要传递的参数格式为*mp4v,如果保存avi格式的录像,则传递*XVID

fps:保存的录像视频帧率

frameSize录像文件视频分辨率大小,即视频画面的宽和高。特别注意:frameSize的两个参数,一个是视频画面宽videoWidth,一个是视频画面高videoHeight,这2个参数请务必一定要是int类型,不能传递其它类型,比如double或float格式的,否则运行程序时会报错:Opencv -5:Bad argument,如下截图

isColor表示录像用彩色画面还是黑白画面,默认True,彩色画面

抓拍图片

用到cv2的imwrite函数,调用方式如下:

cv2.imwrite(filename, frame)

参数说明:

filename:保存的抓拍图片文件路径及名字

frame抓拍的视频帧,其类型为Mat

3 创建测试项目

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

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

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

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

# !usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import os#打开网络摄像头录像
def open_camera_and_record(url):try:print("======to open ip camera and record...")#使用OpenCV自带的VideoCapture()函数定义视频文件对象,网络摄像机本质上可以看作远程网络视频文件cap = cv2.VideoCapture(url)# *mp4v是mp4在openCV里的写法fourcc = cv2.VideoWriter_fourcc(*'mp4v')#获取视频参数:宽、高、每秒传输帧数videoWidth = cap.get(cv2.CAP_PROP_FRAME_WIDTH)videoHeight = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)videoFps = cap.get(cv2.CAP_PROP_FPS)print('width = %d, height = %d, fps = %d.' % (videoWidth, videoHeight, videoFps))#定义录制视频对象,录像文件./record/output.mp4recordFile = './record/output.mp4'lz = cv2.VideoWriter(recordFile, fourcc, int(videoFps), (int(videoWidth),int(videoHeight)), True)count = 0#循环读取每一帧while(cap.isOpened()):#第一个返回值result是一个布尔值,表示当前这一帧是否获取正确result, frame = cap.read()#读取视频文件结束时,退出播放if not result:print('play end...')break#在名称为“real video”的窗口中,显示视频cv2.imshow("real video", frame)# 写入每一帧lz.write(frame)#当按下"q"或“Q”键时,退出录制key = cv2.waitKey(1)if key == ord('q') or key == ord('Q'):break#按下空格键开始抓拍截图if 32 == key:filename = "./picture/picture_%s.bmp" % countcv2.imwrite(filename, frame)count += 1#释放视频文件或摄像头资源cap.release()lz.release()#销毁所有窗口,释放资源cv2.destroyAllWindows()print("test end...")except Exception as e:#访问异常的错误编号和详细信息print(str(e))#若当前目录不存在,则创建;否则不用创建
def make_dir(path):isExist = os.path.exists(path)if not isExist:os.mkdir(path)print(path + ' ok...')return Trueelse:print(path + ' is already exist...')return Trueif __name__ == '__main__':#创建录像文件保存目录make_dir('./record')#创建抓拍图片保存目录make_dir('./picture')#打开网络摄像头播放url = 'rtsp://admin:123456@192.168.1.104:554/Streaming/Channels/101'open_camera_and_record(url)

测试项目工程当前目录,新创建2个文件夹:record和picture,分别用于保存录像文件和抓拍图片文件

VS中代码截图

4 效果截图

录像文件

使用VLC打开播放

抓拍图片

打开图片

Python调用OpenCV接口实现网络摄像头录像和抓拍图片相关推荐

  1. Win10系统C++调用OpenCV实现网络摄像头录像和抓拍图片

    1 前言 前边文章介绍了在WIN10系统上,分别用C++和Python调用OpenCV接口,播放本地和网络摄像头视频.本篇我们来看一下,用C++如何调用OpenCV接口,打开网络摄像头的视频,对其进行 ...

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

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

  3. Win10系统,用C++调用OpenCV接口,播放本地视频文件,播放本地和网络摄像头

    1 前言 前边2篇文章介绍了在WIN10系统上,分别用C++和Python调用OpenCV接口,加载和显示一张静态图片.本篇我们来看一下,用C++如何调用OpenCV接口,打开和播放本地视频文件,打开 ...

  4. Python调用OpenCV实现图像平滑处理

    1 前言 上一节,我们介绍了C++调用OpenCV接口,如何实现对图像的平滑处理,本节我们介绍一下在Python环境下调用OPenCV接口,如何对图像进行平滑模糊处理.接下来我们依次介绍均值滤波器.中 ...

  5. python调用opencv处理视频_Python调用OpenCV读写视频

    最近因为经常对视频进行操作,所以记录下Python用opencv来读写视频的方法. 一.opencv读视频 python调用opencv来读视频比较简单,可以直接调用cv2.VideoCapture来 ...

  6. 实现python 调用 C++ 接口的 easypr

    实现python 调用 C++ 接口的 easypr 本文实现了用python 调用 C++ 的easypr ,实现车牌的识别. CMakelist.txt 以及调用方法将会附上 CMakelist. ...

  7. pythondockerapi_docker-py 用Python调用Docker接口的方法

    众所周知,Docker向外界提供了一个API来管理其中的资源.这个API可以是socket文件形式的(一般也是默认的,在/var/run/docker.sock中),也可以是TCP形式的.以前想要通过 ...

  8. c调python_应该是史上最全的python调用C接口

    在这段时间里,我需要使用python调用C接口.我在网上搜索了很多,再加上python的官方文件,并组织备份1.从ctypes加载dll导入* dll = () # func1dll = CDLL ( ...

  9. python调用opencv代码_Python调用OpenCV实现图像平滑代码实例

    主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波. 给图像增加噪声: import cv2 import numpy as np def test ...

  10. python调用webservice接口实例_python调用各种接口,webservice,c接口,com接口,socket协议方法...

    python调用webservice接口(SOAP) (2)调用示例: 需要先安装suds库:pip install suds from suds.client import Client #如果需要 ...

最新文章

  1. Setup 和Hold (建立时间和保持时间)解析
  2. You should rebuild using libgmp = 5 to avoid timing attack vulnerability.
  3. 不干胶标贴打印模板下载_A4纸打印17*6的不干胶标签打印模板如何设置
  4. 交叉编译_Golang交叉编译
  5. 首发:徐亦达教授团队最新发表的两篇机器学习论文
  6. 分项:我从世界上最成功的人身上学到的10件事
  7. JavaSE04、什么是类和对象,如何使用?
  8. 移远EC600S-CN (4) - MQTT接入阿里云
  9. ubuntu 安装dnsmasq dnscrypt-proxy
  10. ArcGIS学习总结(九)——将.kml转换为.shp
  11. AD9371官网汇总
  12. 用计算机刻盘,电脑怎么刻盘_怎么将电脑桌面的文件刻录到cd光盘
  13. UvaLA 4670 Dominating Patterns
  14. POJ 1625 Censored!(自动机DP+高精度)
  15. Ubuntu上安装BRAT
  16. 生活鸡汤---送给女人和男人的
  17. CIPP翻转内衬法整体修复技术简介
  18. 照着别人的敲代码来学习编程好吗
  19. python读取bin文件,转成16进制通信协议
  20. python爬虫经验之谈

热门文章

  1. php开发数独,数独解题小程序实现代码
  2. U盘怎么制作Win11系统安装盘
  3. 微信公众号、企业服务号如何配置运营管理人员
  4. 电脑在登陆界面如何打开计算机管理,无线路由器管理界面如何登录 无法进入管理界面怎么办...
  5. 在VC中用CMenuXP使应用程序拥有Office XP风格的界面
  6. CAD手机端怎么将DWG格式的图纸文件转换成PDF格式?
  7. web kettle 数据采集
  8. 个人网站首页设计模板
  9. 轻量级jQuery带底栏轮播(焦点图)插件slideBox
  10. Linux部署rsyslog日志服务器(主机部分)