功能很简单:输入原始视频,输出视频中有画面变化的部分
适合理解基本框架,可以在这个基础上增加各种酷炫时髦的功能 [doge]
※注释非常保姆级※
import cv2
import numpy as np
import os
from datetime import datetime
# 检测两帧之间变化
def detect_motion(frame1,frame2,threshold):
# 计算两帧之间的绝对差异
diff=cv2.absdiff(frame1,frame2)
# 将差异图像转换为灰度图
gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
# 对灰度图进行高斯模糊,减少噪声
blur=cv2.GaussianBlur(gray,(5,5),0)
# 对模糊后的图像进行二值化处理,设置阈值
# thresh为二值化后的差异图像,其中运动物体为白色(255),背景为黑色(0)
_,thresh=cv2.threshold(blur,threshold,255,cv2.THRESH_BINARY)
return thresh
# 保存运动帧
# 参数threshold为差异阈值,当像素差异大于此值时,认为是运动,可自行调整
def save_motion_frames(video_path,output_folder,threshold=25):
# 打开视频文件
cap=cv2.VideoCapture(video_path)
# 截取视频文件名,去掉扩展名如.mp4等,命名输出文件时用
video_name=video_path[-14:-4]
# 时-分-秒,命名输出文件时用
edit_time=datetime.now().strftime("%H-%M-%S")
# 获取视频的帧率和分辨率
# PS:这个参数是每秒有多少帧,可以自己设定,数值增大相当于视频加速
fps = cap.get(cv2.CAP_PROP


被折叠的 条评论
为什么被折叠?



