视频相关操作

视频的相关操作教学

1.OpenCV中视频操作相关函数:

视频读取函数:

cv2.VideoCapture("视频地址")

该函数用来读取视频,在括号中填入视频地址,若要使用摄像头只需在括号中写0即可(电脑自带摄像头编号为0)。

例:Cap = cv2.videocapture(0)


初始化判断函数:

Cap.isOpened()

该函数用来判断视频的读取是否成功,成功返回值为true,失败为false。Cap为读取视频是使用的变量。


帧捕捉函数:

Ret,frame=cap.read()

此函数用于将读取到的帧(相当与图片)存放到自定变量frame中,Ret用于判断读取是否成功。


关闭捕捉函数:

Cap.release()

此函数与视频读取函数相反,相当于把打开的视频关掉。


以上为基本的视频操作函数,要想实现视频的操作,了解视频的读取方式和关闭是基础。

以下为一段视频播放的代码:

import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow('frame', frame)
    if cv2.waitKey(31) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

通过调整waitKey中的参数可以调整视频播放速度的快慢。

2.如何单独保存播放中视频的一小部分

相关函数:

cv2.VideoWriter_fourcc(*'XVID')  #输入四个字符代码即可得到对应的视频编码器。

cv2.VideoWriter(视频名称,解码方式,帧数,分辨率) #创建要保存的视频对象

out.write(frame) #将要保存的视频图片写入out

从播放的视频中重新保存视频只需要四个步骤:

1.创建 cv2.VideoWriter_fourcc() 对象,即要得到对应的视频编码器。

2.创建 cv2.VideoWriter() 对象,作为用来拼接视频的桥梁。

3.用 cap.write()(cap为 VideoWriter() 对象) 把读取的图片写入 VideoWriter() 对象中。

4.用 Cap.release() 将 VideoWriter() 对象关闭。

import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')#括号中的就是编码器的一种,想了解的可以自己查一下
fps = cap.get(cv2.CAP_PROP_FPS)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
#上面的size是为了获取原视频中的分辨率
out = cv2.VideoWriter('camera_test.avi', fourcc,10.0, size)
while(cap.isOpened):
    ret, frame = cap.read()
    frame = cv2.flip(frame, 1)
    out.write(frame)
    cv2.putText(frame,"Press s to save and quit",(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8,(0, 255, 0), 2)
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('s'):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

如过上述代码能够看得懂的话,那么将一堆图片拼接成视频就会容易很多了

3.视频的拼接:

要想拼接视频,我们得先会读取图片。

os.listdir()  #该函数用于读取目标目录下的所有文件

下面直接给代码:

# -*- coding: UTF-8 -*-
import os
import cv2

# 图片合成视频
def image2video(path,size,file_path):
    
    filelist = os.listdir(path) #获取该目录下的所有文件名

    fps = 10
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
 
    video = cv2.VideoWriter( file_path, fourcc, fps, size )
 
    for item in filelist:
        if item.endswith('.jpg'):   #判断图片后缀是否是.jpg
            item = path + '/' + item 
            img = cv2.imread(item)  #使用opencv读取图像
            video.write(img)          #把图片写进视频
            print (item)
    video.release() #释放
 
#image2video(r'F:\\Desktop\\data\\video_cut\\2',(1920,1080))#调用函数

 

image2video(r'F:\\Desktop\\data\\video_cut\\2',(1920,1080),'1.jpg')#调用函数

视频拼接的原理个保存一部分视频的原理是一样的,只需读取文件夹中的图片再将其和成到新建的视频中就行了。

4.FPS的计算:

什么是FPS:

FPS,即每秒传输帧数(Frames Per Second),FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会越流畅。通常,要避免动作不流畅的最低是30。某些计算机视频格式,每秒只能提供15帧。

如何计算FPS:

在网上查阅计算FPS方法的时候总能看到许多不一样的方法,但虽然看起来很杂乱但总的一句话就是:

播放的图片数量 / 经过的时间

看起来好像很难其实很简单,所以我感觉不用教应该也挺易懂的

下面直接放代码吧:

import time

start_time=time.time()   #获取时间
counter=0     #用来记入放出的图片张数
x=1        #用来表示时间————1秒

def FPS():
	if (time.time() - start_time) >= x:   #判断经过时间是否超过1秒
		print("FPS: ", counter / (time.time() - start_time))  输出FPS
		global counter
		counter = 0   #将播放图片数归零
		global start_time
		start_time = time.time()   #重新开始计算经过时间
	else:
		global counter   #如果经过时间不到一秒,则进入这步,将counter数加1
		counter += 1

以上的代码应该不难看懂 ,大概。。

其中最关键的,其实就一句:

print("FPS: ", counter / (time.time() - start_time))

刚才说过,FPS的计算方法其实就是放出的图片张数除去所经过的时间

counter为播放数量,(time.time() - start_time)就为经过的时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值