直線にフィットするC++ opencvのfitLine関数

直線にフィットするC++ opencvのfitLine関数

フィットライン関数

void fitLine(InputArray ポイント、OutputArray line、int distType、
double param、double reps、double aeps );

点積分: std::vector<> または Mat に格納された 2D または 3D 点の入力ベクトル。
line ライン: 出力ラインパラメータ。2D フィットの場合、4 要素のベクトル (Vec4f など) - (vx, vy, x0, y0) である必要があります。ここで、(vx, vy) は直線 (x0 , y0) と同一線上にある正規化されたベクトルです。線上の点です。3D フィットの場合、それは 6 要素のベクトル (Vec6f など) - (vx, vy, vz, x0, y0, z0) である必要があります。ここで (vx, vy, vz) は正規化されたラインと同一線上にあるノーマライザーです。ベクトル、(x0, y0, z0) は線上の点です。
distType: M 推定器によって使用される距離。DistanceTypes
パラメータ パラメータ: あるタイプの距離 ( C ) の数値パラメータを参照してください。0 の場合、最適な値が選択されます。
reps の略: 十分な半径精度 (座標原点と直線の間の距離)。
aeps: 角度は十分正確です。reps と aeps のデフォルトは 0.01 が適切です。

Opencv 関数の説明リンク: https://docs.opencv.org/4.5.4/d3/dc0/group__imgproc__shape.html#gaf849da1fdafa67ee84b1e9a23b93f91f

適合した線の一部を以下に示します内联代码片

	//2D返回的参数  Vec4f - (vx, vy, x0, y0)
	//(vx, vy) 是直线的方向向量
	//(x0, y0) 是直线的中心点坐标
    cv::Vec4f ret_fitLine;
    cv::fitLine(output_points, ret_fitLine, cv::DIST_L2, 0, 0.01, 0.01);

    // y = k * x + b    x = (y - b) / k;
    // b = y - k * x;   
    float k = ret_fitLine[1] / ret_fitLine[0];
    float b = ret_fitLine[3] - (k * ret_fitLine[2]);
    //线段起点x
    int x1 = line_start_p_x;
    int y1 = k * line_start_p_x + b;
    //线段终点x
    int x2 = line_end_p_x;
    int y2 = k * line_end_p_x + b;

    line(outRGB, cv::Point(x1,y1), cv::Point(x2, y2), cv::Scalar(0, 255, 0), 1);

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_41648925/article/details/125480065