Как преобразовать координаты обратно в изображение (x, y) из грубого преобразования (rho, theta)? - PullRequest
4 голосов
/ 15 марта 2011

У меня есть вектор линий, созданный путем вызова функции грубого преобразования в Opencv, и мне нужно преобразовать их обратно в координаты изображения.Я нашел этот пример кода из официальной документации Opencv, но я не понимаю его.Кто-нибудь объяснит, пожалуйста?

for( size_t i = 0; i < lines->size(); i++ )
{
    float rho = lines->at(i)[0]; //[0] is rho
    float theta = lines->at(i)[1]; //[1] is theta
    double a = cos(theta), b = sin(theta);
    double x0 = a*rho, y0 = b*rho;
    cv::Point pt1(cvRound(x0 + 1000*(-b)),
              cvRound(y0 + 1000*(a)));
    cv::Point pt2(cvRound(x0 - 1000*(-b)),
              cvRound(y0 - 1000*(a)));
    line( *mat, pt1, pt2, Scalar(255,0,0), 1, 8 );
}

Что за 1000 делает эту строку?

pt1(cvRound(x0 + 1000*(-b)), cvRound(y0 + 1000*(a)))

Кроме того, почему у pt2 есть отрицательные y-шнуры?Например, если моя первая строка (0,0) в формате (rho, theta), pt2 будет (0, -1000).

Спасибо,

1 Ответ

3 голосов
/ 17 марта 2011

Вот как работает математика для нормальных линий. Взгляните на эту статью - Преобразование линий из нормального в форму перехвата с уклоном оно проходит через математику.

...