Python 在视频中查找与图像匹配的帧
我正在尝试使用opencv查找与图像匹配的帧。我还想找到找到图像的时间范围。这段视频是一段蒙面视频。迄今为止的守则:Python 在视频中查找与图像匹配的帧,python,opencv,Python,Opencv,我正在尝试使用opencv查找与图像匹配的帧。我还想找到找到图像的时间范围。这段视频是一段蒙面视频。迄今为止的守则: def occurence_counter(self): img = cv2.imread('ref_img.jpg', cv2.IMREAD_COLOR) # shrink img = cv2.resize(img, (10, 10)) # convert to b&w img = col
def occurence_counter(self):
img = cv2.imread('ref_img.jpg', cv2.IMREAD_COLOR)
# shrink
img = cv2.resize(img, (10, 10))
# convert to b&w
img = color.rgb2gray(img)
similarities = []
result = self.parse_video(img, str(self.lineEdit.text()).strip(), 1, False)
print result
def parse_video(self, image, video, n_matches, break_point=False,
verbose=False):
similarities = [{'frame': 0, 'similarity': 0}]
frame_count = 0
cap = cv2.VideoCapture(video)
while cap.isOpened():
ret, frame = cap.read()
if type(frame) == type(None):
break
# increment frame counter
frame_count += 1
# resize current video frame
small_frame = cv2.resize(frame, (10, 10))
# convert to greyscale
small_frame_bw = color.rgb2gray(small_frame)
如果我没有弄错的话,你想做的就是模板匹配,你可以找到这个特性的opencv教程。另外,该线程可能对您有用,尤其是@Sam answer,它除了模板匹配之外,还描述比较直方图和特征匹配。如果我没有弄错的话,您想做的就是模板匹配,您可以找到该特征的opencv教程。另外,线程可能对您有用,尤其是@Sam answer,它除了模板匹配之外,还描述比较直方图和特征匹配。找到相同的帧并不是那么容易的问题。有很多可能的解决方案。我将在这里以一种非常笼统的方式描述可能的解决方案 模板匹配 模板匹配是一种计算图像中对应像素相似度的算法。所以,如果你正在寻找非常相似的图像(没有旋转、平移、较大的强度变化),它的算法也不错。对于整个图像来说,速度不是那么快。它更倾向于在多幅图像上找到相同的片段,或者在较大的图像上找到较小的图像,而不是检查两幅图像的相似性。 对于整个图像,只需简单地减去图像,然后使用模板匹配即可。速度快得多。必须有一个假设,即它们彼此非常相似 直方图比较 您可以使用直方图比较。这是最快的方法,但并不准确。草和苹果都是绿色的,但彼此不同。谈到颜色,通常最好使用HSV颜色空间。 特征匹配 该算法是在图像上搜索相似的特征点。有许多算法可以在图像上找到特征。它们应该对尺度变化和旋转等不敏感,但这取决于特征提取算法。 其他失语症 其他算法是PSNR或SSIM。我从来并没有用过它,但有用于计算原始图像和模糊图像的相似性或整个视频序列的相似性。 您也可以尝试比较图像的哈希值。这是一个非常有趣的算法(对我来说),但它并没有很好的文档记录。 特征匹配是这类任务最常用的算法。其原因是,当从不同角度、不同条件或仅部分重叠拍摄图像时,特征匹配算法可以检测相似的图像片段。基于运动的结构匹配算法通常采用特征匹配。
问题的解决总是取决于我们掌握的数据。因此,没有一个答案。找到相同的帧不是那么容易的问题。有很多可能的解决方案。我将在这里以一种非常笼统的方式描述可能的解决方案 模板匹配 模板匹配是一种计算图像中对应像素相似度的算法。所以,如果你正在寻找非常相似的图像(没有旋转、平移、较大的强度变化),它的算法也不错。对于整个图像来说,速度不是那么快。它更倾向于在多幅图像上找到相同的片段,或者在较大的图像上找到较小的图像,而不是检查两幅图像的相似性。 对于整个图像,只需简单地减去图像,然后使用模板匹配即可。速度快得多。必须有一个假设,即它们彼此非常相似 直方图比较 您可以使用直方图比较。这是最快的方法,但并不准确。草和苹果都是绿色的,但彼此不同。谈到颜色,通常最好使用HSV颜色空间。 特征匹配 该算法是在图像上搜索相似的特征点。有许多算法可以在图像上找到特征。它们应该对尺度变化和旋转等不敏感,但这取决于特征提取算法。 其他失语症 其他算法是PSNR或SSIM。我从来并没有用过它,但有用于计算原始图像和模糊图像的相似性或整个视频序列的相似性。 您也可以尝试比较图像的哈希值。这是一个非常有趣的算法(对我来说),但它并没有很好的文档记录。 特征匹配是这类任务最常用的算法。其原因是,当从不同角度、不同条件或仅部分重叠拍摄图像时,特征匹配算法可以检测相似的图像片段。基于运动的结构匹配算法通常采用特征匹配。
问题的解决总是取决于我们掌握的数据。因此,没有一个答案。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@scotty3785这篇文章不符合仅作为链接的答案,因为如果你要删除链接,它仍然包含一些有用的信息:这就是所谓的模板匹配。即使链接被删除了,这里仍然有一些信息需要继续。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@scotty3785这篇文章不符合仅作为链接的答案,因为如果你要删除链接,它仍然包含一些有用的信息:这就是所谓的模板匹配。即使链接断开了,这里仍然有一些信息。