比较当前和上一帧照片 - Python

Comparing current and previous frame photos - Python

我用python记录写的过程(从0到结束),用opencv把写的视频转成很多帧。但是在观察结果的时候,我发现有时候2-3帧的图片是相等的。我想只保留写入文件时相等的第一张图片,并添加时间线。有专家可以给我一些建议吗?以下是我的代码:

#cv2

import numpy as np
import cv2
from PIL import Image


def get_images_from_video(video_name, time_F):
    video_images = []
    vc = cv2.VideoCapture(video_name)
    c = 1
    
    #判斷是否開啟影片
    if vc.isOpened(): 
        rval, video_frame = vc.read()
    else:
        rval = False

    #擷取視頻至結束
    while rval:  
        rval, video_frame = vc.read()
        
        #每隔幾幀進行擷取
        if(c % time_F == 0): 
            video_images.append(video_frame)     
        c = c + 1
    vc.release()
    
    return video_images 

#time_F越小,取樣張數越多
time_F = 24
#影片名稱
video_name = 'writingvideo2/11_0330吳恒基.mp4' 
#numpy
#讀取影片並轉成圖片
video_images = get_images_from_video(video_name, time_F) 
    
    
crop_img=[]
    
   
#顯示出所有擷取之圖片
for i in range(0,len(video_images)): 
    
    #i_str=str(i)    
    #cv2.imshow('windows',video_images[i])
    
    x=50
    y=150
    w=1800
    h=650
    crop_img.append(video_images[i][y:y+h,x:x+w])
    cv2.imshow("cropped", crop_img[i])
    
    #correct write path
    
    i_str=str(i)
    filename='output2/image/11/'+i_str+'.png'
    cv2.imwrite(filename, crop_img[i], [cv2.IMWRITE_JPEG_QUALITY, 90])
    
    
    cv2.waitKey(100)
    
cv2.destroyAllWindows

所以我想要的是,如果它们相等,则保留前一帧并丢弃当前照片

您需要使用某种度量来计算两个连续帧之间的相似度。这是一个经过深入研究的问题,您可以通过阅读此问题获得很多见解。 Image comparison - fast algorithm

但请注意,从视频中丢帧会改变速度,从而改变视频的长度。