在openCV中删除无运动的帧

vshtjzan  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(92)

我试图写一个openCV程序,我把视频分解成帧,然后一个接一个地比较两个帧,如果两者都是相同的,我拒绝帧,否则将帧附加到输出文件。
我怎么才能做到呢?
OpenCV 2.4.13 Python 2.7

bnlyeluc

bnlyeluc1#

下面的示例从连接到系统的第一个摄像机捕获帧,将每个帧与前一帧进行比较,如果不同,则将该帧添加到文件中。如果您在摄像机前静止不动,则在从控制台终端窗口运行程序时,可能会看到打印的诊断“无更改”消息。
有很多方法可以测量一帧与另一帧的差异,为了简单起见,我们使用了新帧与前一帧之间的平均差异,与阈值进行比较。
请注意,openCV read函数将帧作为numpy数组返回。

import numpy as np
import cv2

interval = 100
fps = 1000./interval
camnum = 0
outfilename = 'temp.avi'

threshold=100.

cap = cv2.VideoCapture(camnum)

ret, frame = cap.read()
height, width, nchannels = frame.shape

fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter( outfilename,fourcc, fps, (width,height))

while(True):

    # previous frame
    frame0 = frame

    # new frame
    ret, frame = cap.read()
    if not ret:
        break

    # how different is it?
    if np.sum( np.absolute(frame-frame0) )/np.size(frame) > threshold:
        out.write( frame )
    else:
        print( 'no change' )

    # show it
    cv2.imshow('Type "q" to close',frame)

    # check for keystroke
    key = cv2.waitKey(interval) & 0xFF

    # exit if so-commanded
    if key == ord('q'):
        print('received key q' )
        break

# When everything done, release the capture
cap.release()
out.release()
print('VideoDemo - exit' )

字符串

31moq8wy

31moq8wy2#

使用ffmpeg比python快:

ffmpeg -i "input.mp4" -vf "mpdecimate,setpts=N/FRAME_RATE/TB" "output.mp4"

字符串

相关问题