栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2. Opencv对视频的读取、显示和保存的相关函数介绍和具体操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2. Opencv对视频的读取、显示和保存的相关函数介绍和具体操作

相关函数介绍:

1、视频的读取与显示 了解类VideoCapture:

对于视频的读取,OpenCv提供了接口VideoCapture。要想实现视频的读取与显示,需要熟悉一下该类的构造函数和成员函数。VideoCapture的两个常见构造函数如下:

  1. = cv2.VideoCapture(filename)
    功能:打开视频文件
    参数filename:视频的文件名
  2. = cv2.VideoCapture(index)
    功能:打开相机设备
    参数index:相机设备ID,当只有一个相机时,给0即可

VideoCapture常用到的成员函数:

  1. retval =cv2.VideoCapture. isOpened() #判断视频捕获是否初始化成功。初始化成功返回true。
  2. retval = cv2.VideoCapture.get(propId) #得到相机/视频文件的各种属性。
  3. retval = cv2.VideoCapture.set(propId,value) #设置属性,第一个参数是选择属性类型,第二个参数是值。
  4. retval,image= cv2.VideoCapture.read([,image]) #抓取,解码并返回下一个视频帧。返回值为true表明抓取成功。
  5. none = cv2.VideoCapture.release() #关闭视频文件或相机设备。

从相机中读取并显示视频代码:
VideoDemo:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)#构造函数,调用设备,0指只有一个设备
if not cap.isOpened():
    print("Cannot open camera")
    exit()                  #判断初始化是否成功,成功以后进入循环
while True:
    ret, frame = cap.read()   #ret捕获视频frame视频帧数据
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break  #不能捕获,可能被占用或者出现摄像头问题
                #可以创新在此处添加美颜代码
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break       #q键关闭窗口
cap.release()
cv.destroyAllWindows()#释放销毁窗口

从视频文件中读取视频的相关完整代码:

import numpy as np
import cv2

cap = cv2.VideoCapture('Minions_banana.mp4')#视频文件的名字

# 帧率
fps = cap.get(cv2.CAP_PROP_FPS)  # 25.0
print("frames per second using video.get(cv2.CAP_PROP_FPS) : {0}".format(fps))
# 总共有多少帧
num_frames = cap.get(cv2.CAP_PROP_frame_COUNT)
print('共有', num_frames, '帧')
#视频文件的尺寸
frame_height = cap.get(cv2.CAP_PROP_frame_HEIGHT)
frame_width = cap.get(cv2.CAP_PROP_frame_WIDTH)
print('高:', frame_height, '宽:', frame_width)
#当前帧数
frame_NOW = cap.get(cv2.CAP_PROP_POS_frameS)  # 第0帧
print('当前帧数', frame_NOW)  # 当前帧数 0.0
# 读取指定帧,对视频文件才有效,对摄像头无效
frame_no = 121
cap.set(1, frame_no)  # Where frame_no is the frame you want
ret, frame = cap.read()  # Read the frame
cv2.imshow('frame_no'+str(frame_no), frame)

frame_NOW = cap.get(cv2.CAP_PROP_POS_frameS)
print('当前帧数', frame_NOW)  # 当前帧数 122.0

while cap.isOpened():
    ret, frame = cap.read()#捕获一帧图像
    frame_NOW = cap.get(cv2.CAP_PROP_POS_frameS)  # 当前帧数
    print('当前帧数', frame_NOW)

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame', gray)
    key = cv2.waitKey(1)
    if key == ord("q"):
        break

cap.release()       #关闭相机
cv2.destroyAllWindows() #关闭窗口

2、视频的保存

对于视频的保存,OpenCv提供了接口VideoWriter。要想实现保存视频,需要熟悉一下该类的构造函数和成员函数。

  1. = cv.VideoWriter( filename, fourcc, fps, frameSize[, isColor] )
    参数:
    filename:给要保存的视频起个名字
    fourcc:指定视频编解码器的4字节代码
    fps:帧率
    frameSize:帧大小
    isColor:如果为true,则视频为彩色,否则为灰度视频,默认为true
  2. retval = cv2.VideoWriter_fourcc( c1, c2, c3, c4 )
    它是用于压缩帧的4字符编解码器代码。如VideoWriter :: fourcc(‘P’,‘I’,‘M’,‘1’)是MPEG-1编解码器,VideoWriter :: fourcc(‘M’,‘J’,‘P’,'G ')是一个运动jpeg编解码器等。
  3. None = cv.VideoWriter.write( image )
    功能:将帧图像保存为视频文件。

相关完整代码:

import numpy as np
import cv2

from videowrite import fourcc#   从videowrite中调用fourcc

cap = cv2.VideoCapture(0)  #捕获摄像头
width = 640         #设置摄像头窗口的尺寸
ret = cap.set(3, width)
height = 480
ret = cap.set(4, height)

out = cv2.VideoWriter('output.avi', fourcc, 20.0, (width, height))
                    # 视频名字, 指定的视频编码解码的4节代码, 帧率, 帧大小(宽,高)
while cap.isOpened(): # 检查是否成功初始化,否则就 使用函数 cap.open()
    ret, frame = cap.read() # 抓取图像,ret 返回一个布尔值 True/False
    if ret is True:         #true为彩色,否则为灰色
        frame = cv2.resize(frame, (640, 480))
        out.write(frame)            #保存视频
        cv2.imshow('frame', frame)  #显示视频
    else:							#否则就break
        break
    key = cv2.waitKey(1)
    if key == ord("q"):   #输入q关闭窗口
        break
cap.release()            #释放摄像头窗口
out.release()			#释放保存的视频
cv2.destroyAllWindows()  #  摧毁窗口

以上是opencv对视频的读取显示和保存,其实和图片有很大的相似性,图片用到的imread imshow imwrite,视频用到了videocapture videowriter,都需要初始化,都可以调节尺寸和灰度值,不同的地方在于视频用ret函数去捕获,图片直接可以用imread加载。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号