Я использую фильтр Калмана для отслеживания некоторых изображений, и иногда мне нужно изменить порядок данных, чтобы убедиться, что индексы разных векторов совпадают. Я делаю это с помощью быстрой логической проверки, гарантирующей, что позиция текущего кадра находится в пределах допуска относительно последнего кадра. если это так, я перемещаю данные во второй вектор, чтобы соответствовать новому индексу, а затем перемещаю полностью переупорядоченный вектор обратно в исходный вектор. Как показано ниже:
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
Я новичок в кодировании. Есть ли лучший способ изменить порядок данных или я просто пропустил простой шаг?
Я понял проблему. Я не инициализировал фильтры Калмана в новом векторе, поэтому, когда система перешла на использование нового фильтра, не было данных матрицы или набора масштабирования. Теперь все намного лучше. Спасибо за поиск
Других решений пока нет …