В моем коде я обнаруживаю только вертикальные линии через HoughLinesP (OpenCV). Вот пример вырезанного вывода:
Когда-то это была дверь, тогда я применил хитрый алгоритм. Если установить только угол 90 градусов, будут обнаружены только вертикальные линии (красные). Но теперь я хотел бы также добавить зеленые линии к этой небольшой секции над дверью.
Угол рассчитывается так:
double angle = atan2(ppt2.y - ppt1.y, ppt2.x - ppt1.x) * 180.0 / CV_PI;
if (angle) {
line(cdst, ppt1, ppt2, Scalar(0, 0, 255), 2, CV_AA);
}
Так, как я мог дополнительно обнаружить зеленые? И особенно только те, что над дверью?
Спасибо!
Ваши результаты показывают только вертикальные линии, и, хотя да, вы отклоняете только горизонтальные линии, возможно, вы захотите посмотреть, что на самом деле удаляет этот тест. Кроме того, отклонение горизонтальных линий — это не то же самое, что принимать только вертикальные линии, я думаю, что в этом случае вы в основном получаете только вертикальные линии от HoughLinesP.
В любом случае, чтобы обнаружить больше диагональных линий, вам нужно изменить тета-параметр HoughLinesP с pi / 2:
HoughLinesP(dst, lines, 1, CV_PI / 2, 66, 50, 150);
например:
HoughLinesP(dst, lines, 1, CV_PI / 180.0, 66, 50, 150);
И тогда вам, вероятно, нужно сделать ваш угол отклонения более устойчивым / сложным, чтобы отклонять линии со странными углами, а также точно линии 0,000000000000 радиан, возвращаемые atan2, и в любом случае он будет казаться намного более устойчивым, например. небольшие изменения угла изображения для проверки диапазона углов, например, +/- 0,01
Других решений пока нет …