0

使用 lucas kanade 光流在多个图像上测试了特征检测,并已成功执行。现在我希望将此代码与 IMU 数据和时间戳集成。

cap = cv2.VideoCapture('sample.mp4') 

feature_params = dict( maxCorners = 100, 
                      qualityLevel = 0.3, 
                      minDistance = 7, 
                      blockSize = 7 ) 

  lk_params = dict( winSize = (15, 15), 
                   maxLevel = 2, 
                   criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 
                              10, 0.03)) 
  
  color = np.random.randint(0, 255, (100, 3)) 
  
  ret, old_frame = cap.read() 
  old_gray = cv2.cvtColor(old_frame, 
                         cv2.COLOR_BGR2GRAY) 
  p0 = cv2.goodFeaturesToTrack(old_gray, mask = None, 
                              **feature_params) 
  
  mask = np.zeros_like(old_frame) 
  
  while(1): 
      
       ret, frame = cap.read() 
       frame_gray = cv2.cvtColor(frame, 
                                cv2.COLOR_BGR2GRAY) 
  
       p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, 
                                             frame_gray, 
                                             p0, None, 
                                             **lk_params) 
  
       good_new = p1[st == 1] 
       good_old = p0[st == 1] 
  
       for i, (new, old) in enumerate(zip(good_new,  
                                         good_old)): 
           a, b = new.ravel() 
           c, d = old.ravel() 
           mask = cv2.line(mask, (a, b), (c, d), 
                          color[i].tolist(), 2) 
          
           frame = cv2.circle(frame, (a, b), 5, 
                             color[i].tolist(), -1) 
          
        img = cv2.add(frame, mask) 
  
        cv2.imshow('frame', img) 
      
        k = cv2.waitKey(25) 
        if k == 27: 
            break

         old_gray = frame_gray.copy() 
         p0 = good_new.reshape(-1, 1, 2) 
  
    cv2.destroyAllWindows() 
    cap.release()

这是一个 python opencv 库,用于捕获图像上的特征。这用于运行多个图像并输出特征。我看到的问题是我们只在图像帧中获取特征数据,并且我试图在世界帧中捕获它,所以我需要 IMU 来这样做。

4

0 回答 0