这里我们将对传上去的视频文件进行处理,所用语言为Python,依赖包为python-opencv,工具为ffmpeg
主要函数为:
// 对视频的每一帧进行处理:图像转HSV或黑白 cv2.COLOR_RGB2HSV cv2.COLOR_BGR2GRAY
cv2.cvtColor(img,cv2.cv2.COLOR_RGB2HSV)
//直方图均衡化
cv2.equalizeHist(img)
//高斯模糊和边缘检测
img = cv2.GaussianBlur(img, (3, 3), 0)
img = cv2.Canny(img, 30, 100)
步骤
代码
import os
import cv2
import subprocess
os.chdir('f:/movieData')
v_path='F:/movieData/ghz.mp4'
image_save='./pic2'
cap=cv2.VideoCapture(v_path)
frame_count=cap.get(cv2.CAP_PROP_FRAME_COUNT)
#以高斯模糊和边缘处理为例
for i in range(int(frame_count)):
_,img=cap.read()
# img=cv2.cvtColor(img,cv2.cv2.COLOR_RGB2HSV) #cv2.COLOR_RGB2HSV cv2.COLOR_BGR2GRAY
img = cv2.GaussianBlur(img, (3, 3), 0)
img = cv2.Canny(img, 30, 100)
cv2.imwrite('./pic2/image{}.jpg'.format(i),img)
# 接下来为合并每一帧形成视频
images_path = image_save+'/image%d.jpg'
#帧率
fps = str(24)
str_cmd = '"./ffmpeg/bin/ffmpeg.exe" -i ' + images_path + ' -r '+fps+' output_new.mp4'
#str_cmd = 'dir'
p = subprocess.Popen(str_cmd, shell=True, stdout=None, stderr=None)
stdout, stderror = p.communicate()
总结:这次的视频处理总体很顺利,只有在合成视频的过程中因为播放器不同的问题,而导致视频无法播放,换一个播放器就行了,或者合并成视频时改写参数也行。
相关网站:http://ffmpeg.org/