2015-10-22 8 views
1

Делаю установку, которая отслеживает капли с использованием openCv и проецирует графику поверх капель. Проблема в том, что моя камера выключена и выключена от проектора.OpenCv Blob отслеживание точки относительно плоскости

Я думаю, чтобы получить положение точки относительно плоскости проекции, мне нужно будет откалибровать, пометив углы плоскости, как видно на экране камеры.

Моя проблема заключается в том, как я могу использовать эту информацию в 4 очка, а затем преобразовать отслеживаемый кадр из вида камеры в плоскость проекции, чтобы проецируемые графические линии отображались с отслеживаемой капли? Не уверен, что я должен искать.

ответ

1

После обнаружения точек с четырьмя углами вы можете вычислить преобразование в плоскость проектора, используя PerspectiveTransform.

Как только у вас есть это преобразование, вы можете использовать warpPerspective, чтобы перейти от одной системы координат к другой.

+0

Мне не нужно преобразовывать изображения. Мне просто нужно вычислить очки. И получить новую точку. Я на самом деле понял это путем обратного проектирования кода, который сделал преобразование. Но я не уверен, есть ли лучший способ сделать это. [link] (http://wonderfl.net/c/GFLY) – intosite

+0

Вам не нужно использовать преобразование для деформации всего изображения, вы можете просто преобразовать свою координату blob. Когда у вас есть матрица преобразования, она довольно проста, см. Формулу в [warpPerspective] (http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html#warpperspective) –

+0

О, это звучит правильно. Посмотрев на метод, как я могу получить матрицу преобразования? – intosite

0

К сожалению, я не могу помочь с минимальным примером кода на данный момент, но я рекомендую посмотреть на ofxCv и это примеры. Существует пример, основанный на использовании камеры, но обертка также предоставляет утилиты для искажения/неосвоенной перспективы через warpPerspective и unwarpPerspective.

Голые в виду ofxCv имеет удобную функцию для преобразования в/из ofImage в cv::Mat как toCv() и toOf()

ofxCv может сделать его проще использовать функции OpenCV Elad Джозеф рекомендует (которые звучат как именно то, что вам нужно)