opencv视频抽帧对比图像,从第一帧开始,每隔30帧抽一次,如果不符合要求可以往前退四帧再进行比较,代码
时间: 2023-06-16 19:05:25 浏览: 52
使用opencv提取视频帧
下面是基于 OpenCV 的实现代码,具体注释见代码中:
```python
import cv2
# 加载视频文件
cap = cv2.VideoCapture('video.mp4')
# 读取第一帧作为比较基准
ret, base_frame = cap.read()
if not ret:
print('视频文件读取失败')
exit()
# 设置每隔多少帧抽取一帧
interval = 30
# 设置往前退的帧数
back_steps = 4
# 设置比较的阈值
threshold = 0.9
# 记录当前帧数
frame_count = 0
# 循环读取视频帧
while True:
ret, frame = cap.read()
if not ret:
break
frame_count += 1
# 如果当前帧数不是抽帧的倍数,则跳过
if frame_count % interval != 0:
continue
# 计算往前退的帧数
back_frames = min(back_steps, frame_count - 1)
# 往前退指定帧数
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_count - back_frames - 1)
# 读取往前退后的帧作为比较帧
ret, cmp_frame = cap.read()
if not ret:
break
# 比较当前帧和比较帧的相似度
similarity = cv2.matchTemplate(frame, cmp_frame, cv2.TM_CCORR_NORMED)
# 如果相似度大于阈值,则认为两帧相同
if similarity[0][0] > threshold:
continue
# 显示不相似的两帧
cv2.imshow('base_frame', base_frame)
cv2.imshow('frame', frame)
cv2.waitKey(0)
# 当前帧作为新的比较帧
base_frame = frame
# 释放资源
cap.release()
cv2.destroyAllWindows()
```
需要注意的是,抽帧的间隔和往前退的帧数可以根据实际情况进行调整,比较的阈值也可以根据需要进行调整。
阅读全文