Пусть фильтр Калмана исправит круг - PullRequest
0 голосов
/ 13 июля 2020

Я хочу, чтобы фильтр Калмы исправлял мой круг Хафа

, потому что я обнаружил, что круг неточен

может научить меня вставлять фильтр Калмана в мой код?

хочу, чтобы калман исправлял каждый мой круг кадра

Я использую видео каждый кадр в моем круге

вот мой код

import numpy as np
import cv2

cap = cv2.VideoCapture(r"C:\Users\MarK\Desktop\Meeting\2020\eye_frame\eye video\video_eye4.mp4")


#fourcc = cv2.VideoWriter_fourcc(*'XVID')
#out = cv2.VideoWriter(r"C:\Users\MarK\Desktop\Meeting\2020\0618 meeting\video_eye4 sobel.avi",fourcc,20,(480,848))


kalman = cv2.KalmanFilter(4,2)
kalman.measurementMatrix = np.array([[1,0,0,0],[0,1,0,0]],np.float32)
kalman.transitionMatrix = np.array([[1,0,1,0],[0,1,0,1],[0,0,1,0],[0,0,0,1]],np.float32)
kalman.processNoiseCov = np.array([[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],np.float32) * 0.03
kalman.statePre =  np.array([[6],[6]],np.float32)  



while(cap.isOpened):
  ret, frame = cap.read()   
  if ret==False:
      break
 
  Gauss = cv2.GaussianBlur(frame,(3,3),3)

  kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) 
  dst = cv2.filter2D(Gauss, -1, kernel=kernel)

  gray = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
  
  mask = np.zeros(gray.shape, dtype=np.uint8)
  
  mask.fill(255)
  
  mask = cv2.circle(mask, (270,370), 100, (0, 0, 0), -1)
  
  maskimage=cv2.add(mask ,gray)
  cv2.imshow("maskimage",maskimage)
  canny = cv2.Canny(maskimage,25,38)
  cv2.imshow("canny",canny)

  circles= cv2.HoughCircles(canny, cv2.HOUGH_GRADIENT, 1, 2000, param1=60, param2=10, minRadius=50, maxRadius=80)
  for circle in circles[0]:
    
    x=int(circle[0])
    y=int(circle[1])
    r=int(circle[2])
    print('圓的中心為(%s, %s), 半徑為%s.' % (x, y, r))

    image = cv2.circle(frame, (x,y), r, (0,0,255), 1)
    cv2.imshow("frame",image)

    
    out.write(frame)
    cv2.waitKey(50)
    if cv2.waitKey(10) &0xFF ==ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

спасибо за помощь

...