0
我使用卡爾曼濾波器進行某些圖像跟蹤,並且有時需要重新排序數據以確保不同向量的索引相同。我通過快速邏輯檢查來確保當前幀的位置在最後一幀的容差範圍內。如果是這種情況,我將數據移動到第二個矢量以匹配新的索引,然後將完全重新排列的矢量移回原始矢量。如下圖所示:OpenCV錯誤:在向量間移動數據時聲明失敗
void vector_order(vector<Rect> found_filtered)
{
int j, i;
vector<KalmanFilter> organise_KF(10);
vector<kal_ret> organise_kal(10);
vector<FilterHistory> organise_MAV(10);
for (i=0; i<found_filtered.size(); i++)
{
for (j=0; j<track_ret.size(); j++) //compare tracks for kalman filter
{
if (found_filtered[i].x >= track_ret[j].measPt.x-12 || found_filtered[i].x <= track_ret[j].measPt.x+12)
{
if (found_filtered[i].y >= track_ret[j].measPt.y-30 || found_filtered[i].y <= track_ret[j].measPt.y+30)
{
organise_kal[i] = track_ret[j];
organise_KF[i] = KF[j];
break;
}
}
}//if there is no match that index will stay empty to be filled by the filter return
for (j=0; j<filter_ret.size(); j++) //compare tracks for moving average filter
{
if (found_filtered[i].x >= filter_ret[j].current.x-12 || found_filtered[i].x <= filter_ret[j].current.x+12)
{
if (found_filtered[i].y >= filter_ret[j].current.y-30 || found_filtered[i].y <= filter_ret[j].current.y+30)
{
organise_MAV[i] = filter_ret[j];
}
}//if there is no match that index will stay empty to be filled by the filter return
}
}
for (i=0; i<10; i++)
{
track_ret[i] = organise_kal[i];
filter_ret[i] = organise_MAV[i];
KF[i] = organise_KF[i];
}
}
問題一旦系統進入使用數據爲它引發以下錯誤第二次是:
OpenCV Error: Assertion failed (dims <= 2 && (unsigned)i0 < (unsigned)(size.p[0])*size.p[1]) && elemSize() == (((((DataType<_Tp>::type) & ((512 - 1) << 3)) >> 3) + 1) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> ((DataType<_Tp>::type) & ((1 << 3) - 1))*2) & 3))) in unknown function, file C:\opencv\build\include\opencv2/core/mat.hpp, line 569
我是新來的編碼。有沒有更好的方式來重新排序數據,或者我錯過了一個簡單的步驟?
我意識到了這個問題。我沒有在新的矢量中初始化卡爾曼濾波器,所以當系統使用新的濾波器時,沒有矩陣數據或縮放集。現在一切都好多了。感謝您的期待 – user3544531