Я пытаюсь отслеживать объект из видеопотока, используя алгоритм SIFT. Я хочу обнаружить объект и отследить его, нарисовав прямоугольник вокруг него. Проблема в том, что прямоугольник перекошен и не точно нарисован большую часть времени. Я использую следующий код, чтобы нарисовать прямоугольник вокруг обнаруженного объекта (videoImage
это кадр из видеопотока).
line(videoImage, sceneCorners[0], sceneCorners[1], Scalar(255, 0, 0), 2);
line(videoImage, sceneCorners[1], sceneCorners[2], Scalar(255, 0, 0), 2);
line(videoImage, sceneCorners[2], sceneCorners[3], Scalar(255, 0, 0), 2);
line(videoImage, sceneCorners[3], sceneCorners[0], Scalar(255, 0, 0), 2);
Я также попробовал следующий код (imgMatches
это изображение только с хорошими совпадениями)
line(imgMatches, sceneCorners[0] + Point2f( object.cols, 0), sceneCorners[1] + Point2f( object.cols, 0), Scalar(0, 255, 0), 2);
line(imgMatches, sceneCorners[1] + Point2f( object.cols, 0), sceneCorners[2] + Point2f( object.cols, 0), Scalar(0, 255, 0), 2);
line(imgMatches, sceneCorners[2] + Point2f( object.cols, 0), sceneCorners[3] + Point2f( object.cols, 0), Scalar(0, 255, 0), 2);
line(imgMatches, sceneCorners[3] + Point2f( object.cols, 0), sceneCorners[0] + Point2f( object.cols, 0), Scalar(0, 255, 0), 2);
Оба, похоже, дают одинаковый результат. Итак, мой вопрос: как нарисовать прямоугольник, ограничивающий мой отслеживаемый объект, который соответствует отслеживаемому объекту? Кстати, я использую OpenCV (C ++) с Visual Studio 2010 на Windows 7.
Проблема не в рисовании прямоугольника, а в правильном определении объекта. Очень часто обнаружение на отдельных изображениях зашумляет, если вы получаете только некоторые ключевые точки, даже если вы фильтруете их с помощью RANSAC и фундаментальной матрицы или гомографии.
Если вы хотите более точный прямоугольник вокруг объекта, вы должны написать лучший алгоритм обнаружения. Например, вы можете попытаться найти больше соответствий, когда у вас есть первый намек на положение объекта на изображении.
Может быть, посмотрите на этот вопрос SIFT матчей и признание?. Это примерно тот же вопрос. Решение — это 4D пространство.