2014-02-03 5 views
1

Я хочу спросить, существует ли метод обнаружения только горизонтальных линий Hough или игнорирования этих почти вертикальных линий Hough? Мой код HoughLine теперь, как показано ниже:Удаление вертикальных HoughLines/Только определение горизонтальных HoughLines

HoughLinesP(imagec, lines, 80, CV_PI/2, CV_THRESH_OTSU|CV_THRESH_BINARY, 25, 7); 
for(size_t i = 0; i < lines.size(); i++) 
    { 
     Vec4i l = lines[i]; 
     line(imagec, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(255,255,255), 8, 8); 
     line(imagelines, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(255,255,255), 8, 8); //draw on black image as well 
    } 

Однако в изображении, я ищу только для обнаружения горизонтальных линий, или, по крайней мере, вблизи горизонтальных линий, как по 2 до 4 см. Я использую CV_PI/2 для параметра theta в HoughLineP, поэтому также обнаруживаются вертикальные линии/вблизи вертикальных линий.

Любые предложения, образцы кода и т. Д. Будут очень признательны. Благодарю.

ответ

5

Чтобы удалить вертикальную линию

  • сначала найти угол для каждой линии, используя уравнение

    double Angle = atan2(y2 - y1, x2 - x1) * 180.0/CV_PI;

  • Просто игнорировать линию, которая имеет угол 90 градусов (вертикальная линия).

Done!.

+0

Спасибо, Вы знаете, как получить значения y2, y1, x2, x1 из вектора? Я использую «vector lines;» для моих строк, поэтому я не могу использовать CvPoint для их получения, и это единственный способ, который я знаю. Благодарю. – rockinfresh

+0

Решил. Я использовал atan вместо atan2. Еще раз спасибо (: – rockinfresh

+3

Просто для добавления пользователей python-opencv это будет 'np.arctan2' –

3

Python версии

import numpy as np 
angle = np.arctan2(y2 - y1, x2 - x1) * 180./np.pi 
Смежные вопросы