使用opencv python比较两个精确的视频
我的目标是确定两个完全相同的视频之间的相似性。我的方法有点幼稚,即逐帧比较,看两帧是否完全匹配。为此,我使用以下python代码:使用opencv python比较两个精确的视频,python,opencv,image-processing,video,video-processing,Python,Opencv,Image Processing,Video,Video Processing,我的目标是确定两个完全相同的视频之间的相似性。我的方法有点幼稚,即逐帧比较,看两帧是否完全匹配。为此,我使用以下python代码: import cv2 import numpy as np capture = cv2.VideoCapture("video.wmv") capture2 = cv2.VideoCapture("video.wmv") counter = 0 while True: f, frame = capture.read() f2, frame2 = c
import cv2
import numpy as np
capture = cv2.VideoCapture("video.wmv")
capture2 = cv2.VideoCapture("video.wmv")
counter = 0
while True:
f, frame = capture.read()
f2, frame2 = capture2.read()
frame = cv2.GaussianBlur(frame,(15,15),0)
frame2 = cv2.GaussianBlur(frame2, (15, 15), 0)
try:
res = frame - frame2
if(np.count_nonzero(res) > 0 ):
counter += 1
else: continue
except:
print(counter)
我的视频中的总帧数约为600K。代码运行几乎20K帧,具有精确匹配,计数器保持为零(即精确帧匹配),但在20K帧之后,它开始为所有帧返回以下异常
unsupported operand type(s) for -: 'NoneType' and 'NoneType'
从异常中,我了解到它没有读取任何帧,这就是返回非类型的原因。请指导我比较视频的方法是否正确(我知道这不是有效的方法)。为什么我会出现这个错误 为什么不运行一个简单的文件比较,看看两个视频是否相等?它将更加高效,因为它只会迭代压缩数据,因此效率更高。这个线程可能会有帮助:实际上它只是一个开始。我后面的目标是分析两个视频之间的差异(或相似性)。因此,我尝试采用我的方法,看看哪些帧不相同(即res=frame-frame2>0),并确定在视频中的特定点上可能存在一些差异。你的问题没有意义。如果两个视频完全相同,你不必对它们进行比较……我在这个例子中放了相同的视频。但仅仅比较相同的视频并不是目的。我试着放相同的视频,以确保我的代码至少适用于相同的视频。你进入了一个无限的While循环。我猜你的输入视频只有20K帧,这就是为什么你得到了非类型:)你为什么不运行一个简单的文件比较,看看两个视频是否相等?它将更加高效,因为它只会迭代压缩数据,因此效率更高。这个线程可能会有帮助:实际上它只是一个开始。我后面的目标是分析两个视频之间的差异(或相似性)。因此,我尝试采用我的方法,看看哪些帧不相同(即res=frame-frame2>0),并确定在视频中的特定点上可能存在一些差异。你的问题没有意义。如果两个视频完全相同,你不必对它们进行比较……我在这个例子中放了相同的视频。但仅仅比较相同的视频并不是目的。我试着放相同的视频,以确保我的代码至少适用于相同的视频。你进入了一个无限的While循环。我猜你的输入视频只有20K帧,这就是为什么你得到非类型:)