Я пытаюсь визуализировать вывод calcOpticalFlowPyrLK()
(OpenCv v3.0.0). Я не пытаюсь нарисовать все изображение оптическим потоком, только стрелку направления. Проблема в том, что я не могу получить вывод, как в примерах. Каждые 10 кадров обновляю очки для подсчета потока. Сама функция
calcOpticalFlowPyrLK(CentroidFrOld, CentroidFrNow, mc, CornersCentroidNow, feat_found, feat_errors, Size(15, 15), 2, cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 10, 0.03), 0);
Где CentroidFrOld
— это кадр в градациях серого, CentroidFrNow
— это кадр в градациях серого + 1, mc
— это массив vector<Point2f>
точек, а CornersCentroidNow
— пустой массив, ожидающий заполнения новыми точками.
При их рисовании я использую простой код:
for (size_t i = 0; i < CornersCentroidNow.size(); i++){
if (feat_errors[i] > MAX_ERR || feat_found[i] == 0) continue;
Point p0(ceil(mc[i].x), ceil(mc[i].y)); // are the points of interest (centroids of contours)
Point p1(ceil(CornersCentroidNow[i].x), ceil(CornersCentroidNow[i].y));
arrowedLine(empty, p0, p1, Scalar(0, 0, 255), 2, 8, 0, 0.2);
}
после этого блока кода. Когда я рисую их в каждом кадре, я получаю следующий вывод:
Если я обновлю предыдущий кадр, используемый для функции calcOpticalFlowPyrLK()
CentroidFrOld = CentroidFrNow.clone();
Я получаю этот вывод (линия короткая и движется вперед каждые 10 кадров - как указано для получения новых точек)
Если предыдущие точки также являются следующими точками
CentroidFrOld = CentroidFrNow.clone();
mc = CornersCentroidNow;
Я получаю этот вывод (линия короткая, но она движется вместе с объектом)
Желаемый результат, которого я не могу достичь,
Нужно ли вручную удлинять линию? Никто не делает этого в подобных примерах реализации Optical Flow.
calcOpticalFlowPyrLK
. Если вы настроили его правильно, он должен работать, чтобы просто рисовать линии между точками в массивеprevPts
и массивеnextPts
. Я бы порекомендовал вам уменьшитьarrowedLine
до более простогоline
рисования во время отладки - эти короткие линии могут быть ошибочно нарисованными стрелками. - person foundry   schedule 15.02.2016