Python调用OpenCV接口实现网络摄像头录像和抓拍图片
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接口实现网络摄像头录像和抓拍图片相关推荐
- Win10系统C++调用OpenCV实现网络摄像头录像和抓拍图片
1 前言 前边文章介绍了在WIN10系统上,分别用C++和Python调用OpenCV接口,播放本地和网络摄像头视频.本篇我们来看一下,用C++如何调用OpenCV接口,打开网络摄像头的视频,对其进行 ...
- Python调用OpenCV接口播放本地视频文件、本地和网络摄像头
1 前言 上篇文章介绍了在WIN10系统上, C++调用OpenCV接口,播放本地视频文件.本地和网络摄像头视频.本篇我们来看一下,Python如何调用OpenCV接口,做同样的事情. 序号 视频来源 ...
- Win10系统,用C++调用OpenCV接口,播放本地视频文件,播放本地和网络摄像头
1 前言 前边2篇文章介绍了在WIN10系统上,分别用C++和Python调用OpenCV接口,加载和显示一张静态图片.本篇我们来看一下,用C++如何调用OpenCV接口,打开和播放本地视频文件,打开 ...
- Python调用OpenCV实现图像平滑处理
1 前言 上一节,我们介绍了C++调用OpenCV接口,如何实现对图像的平滑处理,本节我们介绍一下在Python环境下调用OPenCV接口,如何对图像进行平滑模糊处理.接下来我们依次介绍均值滤波器.中 ...
- python调用opencv处理视频_Python调用OpenCV读写视频
最近因为经常对视频进行操作,所以记录下Python用opencv来读写视频的方法. 一.opencv读视频 python调用opencv来读视频比较简单,可以直接调用cv2.VideoCapture来 ...
- 实现python 调用 C++ 接口的 easypr
实现python 调用 C++ 接口的 easypr 本文实现了用python 调用 C++ 的easypr ,实现车牌的识别. CMakelist.txt 以及调用方法将会附上 CMakelist. ...
- pythondockerapi_docker-py 用Python调用Docker接口的方法
众所周知,Docker向外界提供了一个API来管理其中的资源.这个API可以是socket文件形式的(一般也是默认的,在/var/run/docker.sock中),也可以是TCP形式的.以前想要通过 ...
- c调python_应该是史上最全的python调用C接口
在这段时间里,我需要使用python调用C接口.我在网上搜索了很多,再加上python的官方文件,并组织备份1.从ctypes加载dll导入* dll = () # func1dll = CDLL ( ...
- python调用opencv代码_Python调用OpenCV实现图像平滑代码实例
主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波. 给图像增加噪声: import cv2 import numpy as np def test ...
- python调用webservice接口实例_python调用各种接口,webservice,c接口,com接口,socket协议方法...
python调用webservice接口(SOAP) (2)调用示例: 需要先安装suds库:pip install suds from suds.client import Client #如果需要 ...
最新文章
- Setup 和Hold (建立时间和保持时间)解析
- You should rebuild using libgmp = 5 to avoid timing attack vulnerability.
- 不干胶标贴打印模板下载_A4纸打印17*6的不干胶标签打印模板如何设置
- 交叉编译_Golang交叉编译
- 首发:徐亦达教授团队最新发表的两篇机器学习论文
- 分项:我从世界上最成功的人身上学到的10件事
- JavaSE04、什么是类和对象,如何使用?
- 移远EC600S-CN (4) - MQTT接入阿里云
- ubuntu 安装dnsmasq dnscrypt-proxy
- ArcGIS学习总结(九)——将.kml转换为.shp
- AD9371官网汇总
- 用计算机刻盘,电脑怎么刻盘_怎么将电脑桌面的文件刻录到cd光盘
- UvaLA 4670 Dominating Patterns
- POJ 1625 Censored!(自动机DP+高精度)
- Ubuntu上安装BRAT
- 生活鸡汤---送给女人和男人的
- CIPP翻转内衬法整体修复技术简介
- 照着别人的敲代码来学习编程好吗
- python读取bin文件,转成16进制通信协议
- python爬虫经验之谈