Hough Lines P - Как узнать, не обнаружена ли линия? - PullRequest
1 голос
/ 07 декабря 2011

Я использовал HoughLinesP для идентификации линий.Однако моя проблема в том, как мне узнать, когда не обнаружено ни одной строки.Я попытался сравнить векторные линии с нулем, но ничего не происходит.Чтобы быть точным, вот мой код:

for(size_t k=0; k<lines.size(); k++){
    Vec4i l = lines[k];
    line(gray, Point(l[0], l[1]), Point(l[2], l[3]),Scalar(0,0,255), 3, CV_AA);
    double x = l[2]-l[0];
    double y = l[3]-l[1];
    double slope = (x/y);
    double rad = atan(slope);
    double pi = 3.1416;
    double deg = (rad*180)/pi;
    double fin = deg+90;

    int part = 0;
    if (lines.empty()){printf("NO LINE IN THIS PORTION OF THE IMAGE!");part = 0;}
    else{
        if (fin>=0 && fin<=45){part = 1;}
        else if (fin>45 && fin<=90){part = 2;}
        else if (fin>90 && fin<=135){part = 3;}
        else if (fin>135 && fin<=180){part = 4;}
    }
    printf("portion number = %d angle = %f PART = %d\n",j, fin, part);
}

Я идентифицирую определенный сектор с переменной part.Если строки не обнаружены, я бы хотел, чтобы part == 0 было истинным.Но я не могу найти правильный способ узнать, не обнаружены ли строки.Это только углы печати, если на изображении уже есть линия.Спасибо!

1 Ответ

1 голос
/ 09 декабря 2011

Вам нужно проверить, является ли вектор lines пустым вне цикла. То, как вы сейчас его настроили, lines никогда не будет определено как пустое, потому что цикл выполняется только если lines.size() > 0.

Вот исправление:

int part = 0;
double fin = -1.0; // just an arbitrary sentinel value (can be whatever you want here).

if(lines.empty())
{
    part = 0;
    fin  = -1.0;
    printf("portion number = %d angle = %f PART = %d\n",j, fin, part);
    printf("NO LINE IN THIS PORTION OF THE IMAGE!");
}
else
{
    for(size_t k=0; k<lines.size(); k++){
        Vec4i l = lines[k];
        line(gray, Point(l[0], l[1]), Point(l[2], l[3]),Scalar(0,0,255), 3, CV_AA);
        double x = l[2]-l[0];
        double y = l[3]-l[1];
        double slope = (x/y);
        double rad = atan(slope);
        double pi = 3.1416;
        double deg = (rad*180)/pi;
        fin = deg+90;

        if (fin>=0 && fin<=45){part = 1;}
        else if (fin>45 && fin<=90){part = 2;}
        else if (fin>90 && fin<=135){part = 3;}
        else if (fin>135 && fin<=180){part = 4;}

        printf("portion number = %d angle = %f PART = %d\n",j, fin, part);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...