我试图写一个openCV程序,我把视频分解成帧,然后一个接一个地比较两个帧,如果两者都是相同的,我拒绝帧,否则将帧附加到输出文件。我怎么才能做到呢?OpenCV 2.4.13 Python 2.7
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' )
字符串
31moq8wy2#
使用ffmpeg比python快:
ffmpeg -i "input.mp4" -vf "mpdecimate,setpts=N/FRAME_RATE/TB" "output.mp4"
2条答案
按热度按时间bnlyeluc1#
下面的示例从连接到系统的第一个摄像机捕获帧,将每个帧与前一帧进行比较,如果不同,则将该帧添加到文件中。如果您在摄像机前静止不动,则在从控制台终端窗口运行程序时,可能会看到打印的诊断“无更改”消息。
有很多方法可以测量一帧与另一帧的差异,为了简单起见,我们使用了新帧与前一帧之间的平均差异,与阈值进行比较。
请注意,openCV read函数将帧作为numpy数组返回。
字符串
31moq8wy2#
使用ffmpeg比python快:
字符串