我想跟蹤圖像中的30個點,並希望使用OpenCV庫中的卡爾曼濾波器穩定跟蹤。我之前做過一個點,併成功地使用點的位置和速度作爲狀態。然後,對於30分,我決定創建30個卡爾曼濾波器,每個點爲一個,並將它們放入一個數組中。但是,我得到了斷言錯誤。OpenCV卡爾曼濾波器初始化錯誤
這是追蹤圖像中30個點的正確/最佳方式嗎?有沒有更好的方法來做到這一點?
我的代碼如下。問題發生在StatePre行。
vector<KalmanFilter> ijvEdgeKF(30);
for(int i = 0; i < 30; i++){
Point temp = calcEndPoint(ijv,170,i*360/30); //Calculates initial point
ijvEdgeKF[i].statePre.at<float>(0) = temp.x; //State x
ijvEdgeKF[i].statePre.at<float>(1) = temp.y; //State y
ijvEdgeKF[i].statePre.at<float>(2) = 0; //State Vx
ijvEdgeKF[i].statePre.at<float>(3) = 0; //State Vy
ijvEdgeKF[i].transitionMatrix = *(Mat_<float>(4, 4) << 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1);
setIdentity(ijvEdgeKF[i].measurementMatrix);
setIdentity(ijvEdgeKF[i].processNoiseCov, Scalar::all(1e-4));
setIdentity(ijvEdgeKF[i].measurementNoiseCov, Scalar::all(1e-1));
setIdentity(ijvEdgeKF[i].errorCovPost, Scalar::all(.1));
}
已解決。問題在於KalmanFilter初始化。我沒有在數組初始化過濾器所以這裏是解決方案:
vector<KalmanFilter> ijvEdgeKF;
ijvEdgeKF.clear();
for(int i = 0; i < 30; i++){
Point temp = calcEndPoint(ijv,170,i*360/30); //Calculates initial point
KalmanFilter tempKF(4,2,0);
tempKF.statePre.at<float>(0) = temp.x; //State x
tempKF.statePre.at<float>(1) = temp.y; //State y
tempKF.statePre.at<float>(2) = 0; //State Vx
tempKF.statePre.at<float>(3) = 0; //State Vy
tempKF.transitionMatrix = *(Mat_<float>(4, 4) << 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1);
setIdentity(tempKF.measurementMatrix);
setIdentity(tempKF.processNoiseCov, Scalar::all(1e-4));
setIdentity(tempKF.measurementNoiseCov, Scalar::all(1e-1));
setIdentity(tempKF.errorCovPost, Scalar::all(.1));
ijvEdgeKF.push_back(tempKF);
}
還有一個問題,雖然,這是一個圖像中跟蹤多個點的唯一途徑還是有更好的辦法?
和錯誤是? – berak
OpenCV錯誤:斷言失敗(變暗<= 2 &&數據&&(無符號)i0 <(無符號)(size.p [0] * size.p [1])&& elemSize()==(((((DataType <_Tp> ((數據類型<_Tp> :: type) &((512-1)<< 3)) >> 3)+ 1)<<((((sizeof(size_t)/ 4 + 1)* 16384 | 0x3a50) ((1 << 3) - 1))* 2)&3)))in unknown function,file c:\ opencv \ build \ include \ opencv2 \ core \ mat.hpp,line 569 – mohikhsan
@mohikhsan:I am working還有一個類似的問題,我也在跟蹤多個對象,你可以跟我分享一下更多的代碼,你是如何進行測量和預測的?如果你能分享那些特定的代碼,我會很感激嗎?我對卡爾曼濾波器感到困惑。這就是爲什麼我問。我的電子郵件ID是[email protected] –