暴力算法中匹配关键点的位置和大小的确定

2024-06-26 14:11:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检测两个连续视频帧(当前帧和前一帧)的特征点,为此我使用SIFT和暴力算法来提取匹配的密钥点。现在我只想得到匹配的关键点到当前帧和他们的位置和大小。我该怎么做?有什么具体的功能可以做到这一点吗?非常感谢你的帮助

以下是我目前的代码:

import cv2
import numpy as np

cap = cv2.VideoCapture('video3.mov')
ret, frame = cap.read()

while(cap.isOpened()):

  prev_frame=frame[:]
  ret, frame = cap.read()

  if ret:

      graycurrent = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
      grayprev = cv2.cvtColor(prev_frame, cv2.COLOR_BGR2GRAY)

      #detect key feature points
      sift = cv2.xfeatures2d.SIFT_create()

      #kp = sift.detect(graycurrent, None)
      kp1, des1 = sift.detectAndCompute(graycurrent, None)

      #draw key points detected
      img1 = cv2.drawKeypoints(graycurrent, kp1,graycurrent, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

      kp2, des2 = sift.detectAndCompute(grayprev, None)
      #draw key points detected
      img2 = cv2.drawKeypoints(grayprev, kp2,grayprev, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

    # BFMatcher with default params
    bf = cv2.BFMatcher(normType=cv2.NORM_L2, crossCheck= True)
    matches = bf.match(des1,des2)


    cv2.imshow("grayframe",img1)
    cv2.imshow("prevFrame",img2)

  else:
      print("could not read the frame")

  if cv2.waitKey(100) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

Tags: keyimportnonereadcv2framepointscap