1、输入一堆直线,返回每条直线的斜率和截距

斜率和截距都是浮点型。

//输入一堆直线,返回每条直线的斜率和截距
//Vec2f为2个点的float,参照存储直线的数据结构
vector <Point2f> get_lines_fangcheng(vector<Vec4i> lines)
{
    float k = 0; //直线斜率
    float b = 0; //直线截距
    vector <Point2f> lines_fangcheng;//直线斜率的反正切值

    for (unsigned int i = 0; i<lines.size(); i++)
    {

        k = (double)(lines[i][3] - lines[i][1]) / (double)(lines[i][2] - lines[i][0]); //求出直线的斜率// -3.1415926/2-----+3.1415926/2
        b = (double)lines[i][1] - k * (double)lines[i][0]; //求出直线的斜率
        lines_fangcheng.push_back(Point2f(k,b));
    }

    return lines_fangcheng;
}

2、输入一堆直线,返回每条直线与水平直线的弧度值
//输入一堆直线,返回每条直线与水平直线的角度,为弧度
vector <float> get_lines_arctan(vector<Vec4i> lines)
{
    float k=0; //直线斜率
    vector <float> lines_arctan;//直线斜率的反正切值
    for (unsigned int i = 0; i<lines.size(); i++)
    {

        k = (double)(lines[i][3] - lines[i][1]) / (double)(lines[i][2] - lines[i][0]); //求出直线的斜率
        lines_arctan.push_back(atan(k));
    }
    return lines_arctan;
}

当然角度稍微转化即可,如下:

    //显示每条直线的角度
    vector <float> lines_arctan;//直线斜率的反正切值
    lines_arctan = get_lines_arctan(lines);

    for (unsigned int i = 0; i < lines.size(); i++)
    {
        cout << "检测到的直线弧度" << lines_arctan[i] << endl;
        cout << "检测到的直线角度为:" << lines_arctan[i] *180.0/3.1415926<< endl;
    }