1

HoughLinesPラインを識別していました。ただし、私の問題は、行が検出されないことをどのように知るかです。ベクトル線を null と比較しようとしましたが、何も起こりません。正確には、ここに私のコードがあります:

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ます。行が検出されない場合は、true にしたいと思いpart == 0ます。しかし、行が検出されていないかどうかを知る正しい方法が見つかりません。画像にすでに線がある場合は、角度のみを印刷します。ありがとう!

4

1 に答える 1

1

linesベクトルがループの外で空かどうかを確認する必要があります。ループlineslines.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);
    }
}
于 2011-12-09T00:15:14.863 に答える