2013-04-03 4 views
7

У меня есть изображение, и в нем есть некоторые фигуры. Я обнаружил линии с использованием линий hough. Как определить, какие линии параллельны?Python openCV обнаруживает параллельные линии

+0

Если это будет сделано в Python, как указано в тегах, вы можете использовать SciPy версию houghlines, которая обеспечивает выходную houghspace изображения: Смотрите здесь] (Http://scikit-image.org/docs/dev/auto_examples/plot_line_hough_transform.html). Затем вы можете перевернуть независимую ось (тета или «X») и зависимую ось (rho или «Y»), так что theta теперь является зависимой осью. После создания этого пространственного изображения Hough (чтобы получить наиболее интенсивные пятна (rho, theta), которые соответствуют наиболее вероятным линиям), вы можете поместить горизонтальную линию в данные: theta = constant (y = mx + b без уклона). – chase

ответ

13

Уравнение линии в декартовых координатах:

у = к * х + б

Две линии у = k1 * х + b1, у = к2 * х + b2 параллельны, если k1 = k2.

Итак, вам нужно рассчитать коэффициент k для каждой обнаруженной линии.

Чтобы однозначно определить уравнение линии вам нужно знать координаты двух точек , которые принадлежат к линии.

После того, как найденные строки с HoughLines (С ++):

vector<Vec2f> lines; 
HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0); 

вас есть векторные линии, в которой хранятся параметры (r, тета) обнаруженных линий в полярных координатах. Вы должны передать их в декартовых координатах:

Вот пример на C++:

for(size_t i = 0; i < lines.size(); i++) 
{ 
    float rho = lines[i][0], theta = lines[i][1]; 
    Point pt1, pt2; 
    double a = cos(theta), b = sin(theta); 
    double x0 = a*rho, y0 = b*rho; 
    pt1.x = cvRound(x0 + 1000*(-b)); //the first point 
    pt1.y = cvRound(y0 + 1000*(a)); //the first point 
    pt2.x = cvRound(x0 - 1000*(-b)); //the second point 
    pt2.y = cvRound(y0 - 1000*(a)); //the second point 
} 

После получив эти две точки линии вы можете вычислить ее уравнение.

+0

thx много для вашего решения. – vtokmak

+3

Достаточно ли проверить, что значения тета для линий обнаружения параллельны или нет? Можем ли мы сказать, что значения тета равны, чем прямые? – vtokmak

+0

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

1

HoughLines возвращает свои результаты в полярных координатах. Поэтому просто проверьте второе значение для угла. Нет необходимости конвертировать в й, у

def findparallel(lines): 

lines1 = [] 
for i in range(len(lines)): 
    for j in range(len(lines)): 
     if (i == j):continue 
     if (abs(lines[i][1] - lines[j][1]) == 0):   
      #You've found a parallel line! 
      lines1.append((i,j)) 


return lines1 
Смежные вопросы