python-opencv-视频处理常用函数

因为研究方向问题需要先视频处理,方便后面进行检测等,这里记录下常用的,方便以后

 

测试所用的视频:https://media.w3.org/2010/05/sintel/trailer.mp4

 

VideoCapture中get和set函数常用的参数如下,值得注意的是在opencv2版本中需要按下面加上CV_前缀,但是在opencv3中是不需要CV_前缀的,下面19个参数依次对应整数0-18

cv2.waitKey( int delay) 
当delay≤0,程序暂停,直到键盘按键才继续运行,同时返回按键的ASCII值;如果delay>0,则等待delay毫秒后继续运行。

因此我们可以用过waitKey函数来实现播放视频中途暂停或退出,例如输入q来退出播放:if cv2.waitKey(10) & 0xFF == ord('q'):

 

测试代码:

# coding: utf-8

import numpy as np
import cv2
import shutil
import os

print ("the opencv version: {}".format(cv2.__version__))

save_path = "./save_each_frames"
if(os.path.exists(save_path)):
    shutil.rmtree(save_path)
os.mkdir(save_path)

#cap = cv2.VideoCapture("./trailer.mp4")
cap = cv2.VideoCapture()
cap.open("./trailer.mp4")
if cap.isOpened() != True:
    os._exit(-1)

#get the total numbers of frame
totalFrameNumber = cap.get(cv2.CAP_PROP_FRAME_COUNT)
print ("the number of frames is {}".format(totalFrameNumber))

#set the start frame to read the video
frameToStart = 1
cap.set(cv2.CAP_PROP_POS_FRAMES, frameToStart);

#get the frame rate
rate = cap.get(cv2.CAP_PROP_FPS)
print ("the frame rate is {} fps".format(rate))

# get each frames and save
frame_num = 0
while True:
    ret, frame = cap.read()
    if ret != True:
        break
    img_path = os.path.join(save_path, str(frame_num)+".jpg")
    cv2.imwrite(img_path,frame)
    frame_num = frame_num + 1

    # wait 10 ms and if get 'q' from keyboard  break the circle
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break

cap.release()

测试结果:

 

利用ffmpeg,我们可以实现视频转图片跟图片传视频的功能:

视频转图片命令:


ffmpeg -i clipname -vf fps=framerate -qscale:v 2 "imagename%04d.jpg"

上述指令将一个视频按照固定的频率生成图片。

 

将一批图片合并为一个视频命令:


ffmpeg  -f image2 -i imagename%04d.jpg -vcodec libx264 -crf 15 -pix_fmt yuv420p output_filename.mp4

可以在最后加入音频文件合并到视频中

 

 

你可能感兴趣的:(随笔)