В настоящее время я работаю над оптическим потоком с OpenCV C ++. Я использую calcOpticalFlowPyrLK с сеткой точек (= одна точка интереса на каждые 5 * 5 пикселей).
Какой самый лучший способ:
1) Вычислить гистограмму рассчитанных значений (ориентация и расстояние) для каждого кадра
2) Вычислить гистограмму значений (ориентация и расстояние), которые данный пиксель принял в течение нескольких кадров (например, 100)
Адаптированы ли функции OpenCV для этой работы? Как я могу использовать их простым способом в сочетании с calcOpticalFlowPyrLK?
Я искал те же инструменты OpenCV пару месяцев назад. К сожалению, OpenCV не включает в себя реализацию гистограммы движения. Вместо этого вам нужно запустить calcOpticalFlowPyrLK для каждого кадра и вычислить ориентацию / длину каждого смещения. Затем вы должны создать / заполнить гистограммы самостоятельно. Не так сложно, как кажется, поверь мне 🙂
Реализация OpenCV для первой части HOOF может быть такой:
const int rows = flow1.rows;
const int cols = flow1.cols;
for (int y = 0; y < rows; ++y)
for (int x = 0; x < cols; ++x)
{
Vec2f flow1_at_point = flow1.at<Vec2f>(y, x);
float u1 = flow1_at_point[0];
float v1 = flow1_at_point[1];
magnitudeImage += sqrt((u1*u1) + (v1 + v1));
orientationImage += atan2(u1, v1);
}