在与图像匹配的视频中查找帧


-1

我正在尝试使用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 = 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)

Answers:


1

如果我没有弄错你想做什么叫做模板匹配,你可以在这里找到该功能的opencv教程。此外线程可能对您有用,尤其是@Sam答案,这超出了模板匹配还描述比较直方图特征匹配


2
虽然此链接可能会回答这个问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面发生更改,则仅链接答案可能会无效。- 来自评论
scotty3785

@ scotty3785这篇文章不符合仅链接答案的标准,因为如果要删除链接,它仍然包含一些有用的信息:这称为模板匹配。即使链接断开,仍然会有一些信息在这里发生。
EJoshuaS

0

找到相同的框架不是那么容易的问题。有很多可能的解决方案。我将在这里以非常一般的方式描述可能的解决方案。

模板匹配

模板匹配是计算图像中相应像素的相似性的算法。因此,如果您正在寻找非常相似的图像(没有旋转,平移,大的有意改变),那么算法并不是那么糟糕。整个图像并不是那么快。它用于在较大图像上找到几个图像上的相同片段或较小图像,而不是检查两个图像的相似性。 https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html

对于整个图像,更容易简单地减去图像然后使用模板匹配。它要快得多。必须假设它们彼此非常相似。

直方图比较

您可以使用直方图比较。这是最快的方式,但不准确。草和苹果都是绿色的,但彼此不同。在颜色方面,通常最好使用HSV色彩空间。 https://docs.opencv.org/3.4.1/d8/dc8/tutorial_histogram_comparison.html

功能匹配

算法正在搜索图像上的simillar特征点。有许多算法可以在图像上找到特征。它们应该对比例变化和旋转等不敏感。但它取决于特征提取算法。 https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_features_meaning/py_features_meaning.html#features-meaning

其他算法

其他算法是PSNR或SSIM。我从未使用它,但是用于计算原始图像和模糊图像的相似性或整个视频序列的相似性。 https://docs.opencv.org/3.4.2/d5/dc4/tutorial_video_input_psnr_ssim.html

您也可以尝试比较图像的哈希值。这是非常令人兴奋的算法(对我来说),但它没有很好的记录。 https://www.pyimagesearch.com/2017/11/27/image-hashing-opencv-python/

特征匹配是此类任务最常用的算法。其原因是特征匹配算法可以在从不同角度拍摄图像,在不同条件下或仅部分重叠时检测相似的图像片段。Motion From Motion算法通常使用特征匹配。 https://hub.packtpub.com/exploring-structure-motion-using-opencv/ 问题的解决方案总是取决于我们拥有的数据。所以没有一个答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.