[opencv]直线拟合函数支持类
Posted lx17746071609
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[opencv]直线拟合函数支持类相关的知识,希望对你有一定的参考价值。
#include "LinearFit.h" //-----------------------直线拟合函数(点集)------------------------- //-----------------------直线拟合函数(直线组)------------------------- /** * [1] * 说明:获取最终筛选出的的直线中最长的一条 * @param lines 筛选出的直线集合 * @return line 筛选出来最长的直线 */ Vec4f LinearFit::LinesGetLongestLine(vector<Vec4f> lines) // 初始值 Vec4f line; float dd = 0.0; for(Vec4f &v: lines) Point2f nodei1, nodei2; nodei1.x = v[0]; nodei1.y = v[1]; nodei2.x = v[2]; nodei2.y = v[3]; float di = PlaneGeometry::NodeDistance(nodei1, nodei2); if(di > dd) dd = di; line = v; return line; /** * [2]多条直线的拟合算法 * 说明:多条直线的拟合算法 * @param line * @return k 斜率 */ vector<Vec4f> LinearFit::LinesDeduplication(vector<Vec4f> lines, int side) vector<Vec4f> n_lines; // 计算两条线段的最短距离 去重 // 可以通过距离判断和直线相对角度来判断并把重合线段筛选为一条,选择最长的线段。 for (int l=0; l< lines.size(); l++) Vec4f line = lines[l]; int addresult = 1; for (int nl=0; nl< n_lines.size(); nl++) Vec4f n_line = n_lines[nl]; // 取线段中点 Point2f midnode; midnode.x = (n_line[0] + n_line[2]) / 2; midnode.y = (n_line[1] + n_line[3]) / 2; // 算距离垂足 tuple<double, Point2f> disnode = PlaneGeometry::NodeLineDistance(midnode, line); double dis = get<0>(disnode); // 新线段长度 float newline_distance = pow((line[0] - line[2]), 2) + pow((line[1] - line[3]), 2); // 旧线段长度 float nowline_distance = pow((n_line[0] - n_line[2]), 2) + pow((n_line[1] - n_line[3]), 2); if (dis < side) if (newline_distance < nowline_distance) // 舍弃新线段 addresult = 0; else // 舍弃旧线段 n_lines = TempHelper::removeObj(n_lines, n_line); if (addresult == 1) // 添加新线段 n_lines.emplace_back((line)); return n_lines;
#include <cmath> #include "../../globals.h" #include "../math/PlaneGeometry.h" using namespace std; using namespace cv; class LinearFit public: //-----------------------直线拟合函数(点集)------------------------- //-----------------------直线拟合函数(直线组)------------------------- /** * [1] * 说明:获取最终筛选出的的直线中最长的一条 * @param line * @return k 斜率 */ static Vec4f LinesGetLongestLine(vector<Vec4f> lines); /** * [2]多条直线的拟合算法 * 说明:多条直线的拟合算法 * @param line * @return k 斜率 */ static vector<Vec4f> LinesDeduplication(vector<Vec4f> lines, int side); ;
以上是关于[opencv]直线拟合函数支持类的主要内容,如果未能解决你的问题,请参考以下文章