最近几天一直在处理铁路铁轨检测和行人检测的部分,对视频截取使用比较多,Adobe Premiere用起来比较麻烦,还得每次都渲染,索性就直接使用OpenCV来进行处理。
OpenCV可以按照帧来进行视频的截取操作。代码如下:
'''
Designed By Zander
2019.3.19
'''
import cv2
videoCapture = cv2.VideoCapture('Rail.avi')
fps = 30 #保存视频的帧率
size = (1920,1080) #保存视频分辨率的大小
videoWriter =cv2.VideoWriter('Rail_1.avi',
cv2.VideoWriter_fourcc('X','V','I','D'),fps,size)
i = 0
while True:
success,frame = videoCapture.read()
if success:
i += 1
print('i = ',i)
if(i>=300and i <= 450): #截取300帧到450帧的视频
videoWriter.write(frame)
else:
print('end')
break
代码中都有注释,比较简洁明了。
下面的代码为从视频中隔固定帧进行图像截取。
import cv2
vc = cv2.VideoCapture('cut.mp4') # 读入视频文件
c = 1
if vc.isOpened(): # 判断是否正常打开
rval, frame = vc.read()
else:
rval = False
timeF = 15 # 视频帧计数间隔频率
a = 1 # 存储图像的标号
while rval: # 循环读取视频帧
rval, frame = vc.read()
if (c % timeF == 0): # 每隔timeF帧进行存储操作
cv2.imwrite('pic/' + str(a) + '.jpg', frame) # 存储为图像
a += 1
c = c + 1
cv2.waitKey(1)
vc.release()