需求:
最近在学一个视频教程,里面的PPT内容很不错,想保存下来,但是边听课边截图很费事。于是上网找了一下相关代码,改了一下实现了。
程序作用:对视频的内容进行截图并编号保存到指定文件夹。
实现原理:
通过openCV获取视频帧,保存为图片。将此图片与上一次获得的图片进行比较。如果不一样(可设定相同内容的百分比),则将此图片截图保存,并更新用于比较的图片。如果一样,则跳过,不保存,继续获取下一帧。
比较图片相同与否的算法是通过PIL库中的image里面的函数,将图像转换为直方图,存储在list中。然后用计算方差的公式计算出一个数值,如果两个图片的这个数值差别太大,则认为两个图片不一样。
详细介绍:
首先,利用播放器来查看视频的帧率。可以看到这个视频是25fps,意思就是每秒25帧,每帧就是一个图像。这个数据在后面选择多长时间采样一次会用到。
获取帧图片函数:
以下代码,每次间隔125帧获取一次图片。除以上面的帧率,就是5秒获取一次图片。
图片比较函数,如下
图片通过上述函数转换为直方图,
image1=image3.histogram()
print(h1)
这个直方图是关于像素数量的list,图像中的每个象素值对应一个成员。如果图像有多个通道,所有通道的直方图会连接起来。打印出来会像下面这样。
这里为什么用方差公式呢?百度百科对于方差公式的解释:
方差公式是一个数学公式,是数学统计学中的重要公式,应用于生活中各种事情,方差越小,代表这组数据越稳定,方差越大,代表这组数据越不稳定。
这里依次作为判断。
程序运行效果还是不错的。很快,也没有占太多资源。
没有试过截电影图片会怎么样。
等2018年学会pyqt了。加个图形界面。视频一拖进去就显示加载路径。可以设置每隔多长时间截一次图。点个按钮就开始截图。那就好了。
领取专属 10元无门槛券
私享最新 技术干货