视频的相关操作教学
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)就为经过的时间