Python 代码是关于使用卡尔曼滤波器跟踪和预测鼠标的轨迹

Python 代码是关于使用卡尔曼滤波器跟踪和预测鼠标的轨迹,python,kalman-filter,Python,Kalman Filter,代码是关于使用卡尔曼滤波器跟踪和预测鼠标的轨迹。 如果将第27行中的“last_prediction=prediction.copy()”修改为“last_prediction=prediction”,则结果将是错误的。 但我不知道为什么。 我在等你的帮助。非常感谢你 import cv2,numpy img=numpy.zeros((800,800,3),numpy.uint8) kalman=cv2.KalmanFilter(4,2) kalman.measurementMatrix=num

代码是关于使用卡尔曼滤波器跟踪和预测鼠标的轨迹。 如果将第27行中的“last_prediction=prediction.copy()”修改为“last_prediction=prediction”,则结果将是错误的。 但我不知道为什么。 我在等你的帮助。非常感谢你

import cv2,numpy
img=numpy.zeros((800,800,3),numpy.uint8)
kalman=cv2.KalmanFilter(4,2)
kalman.measurementMatrix=numpy.array([[1,0,0,0],[0,1,0,0]],numpy.float32)
kalman.transitionMatrix=numpy.array([[1,0,1,0],[0,1,0,1],[0,0,1,0],[0,0,0,1]],numpy.float32)
kalman.processNoiseCov=numpy.array([[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],numpy.float32)*0.03
last_measurement=None
last_prediction=None
def click_the_mouse(event,x,y,flags,param):
    global img,kalman,last_measurement,last_prediction
    measurement=numpy.array([[x],[y]],numpy.float32)
    if last_prediction is None:
        kalman.statePre=numpy.array([[x],[y],[0],[0]],numpy.float32)
        kalman.statePost=numpy.array([[x],[y],[0],[0]],numpy.float32)
        prediction=measurement
    else:
        corrected_measurement=kalman.correct(measurement)
        prediction=kalman.predict()
        print('corrected_measurement:\n',corrected_measurement)
        print('kalman.statePost:\n',kalman.statePost)
        
        cv2.line(img,(int(last_measurement[0]),int(last_measurement[1])),(int(measurement[0]),int(measurement[1])),(0,255,0))
        cv2.line(img,(int(last_prediction[0]),int(last_prediction[1])),(int(prediction[0]),int(prediction[1])),(0,0,255))
    last_measurement=measurement
    last_prediction=prediction.copy()
    #last_prediction=prediction
    
cv2.namedWindow('kalman')
cv2.setMouseCallback('kalman',click_the_mouse)
while True:
    cv2.imshow('kalman',img)
    k=cv2.waitKey(1)
    if k==27:
        cv2.imwrite('kalman.jpg',img)
        break

你好你能解释一下为什么你认为
last\u prediction=prediction
应该有效吗?你对python中的深层和浅层拷贝有什么想法吗?嗨。因为我在第26行看到“最后一次测量=测量”效果很好。所以我不明白为什么“最后的预测=预测”不起作用。我不太懂深浅的复制品。