如何通过OpenCV在C++中实现poly1d?
我知道在Python中,polyfit
这个函数是用来拟合一条直线的,它会返回一个“y=ax+b”的直线方程,来适应给定的点。
在C++中,我使用OpenCV的fitLine
函数,它返回一条直线的四个参数((vx, vy, x0, y0),其中(vx, vy)是与这条直线平行的单位向量,而(x0, y0)是直线上的一个点)。
但是我不太理解poly1d
这个函数。而且我也无法在OpenCV和C++中实现它。
我该如何实现poly1d
并使用fitLine
函数返回的值呢?
lineModel = np.poly1d(np.polyfit([y1, y2], [x1, x2], 1))
1 个回答
0
这可能有点偏离问题的主题,但如果你使用的是早期版本的 openCV
,可以用 polyfit
。我在 openCV 2.4.13
版本中用过这个方法。它可以用来获取任何阶数的拟合系数。不过要注意,返回的系数是反向的,也就是说顺序是倒过来的。
float xData[] = { 0.0f,1.0f ,2.0f,3.0f };
float yData[] = { 3.0f, 2.0f, 1.0f, 0.0f, };
int order = 1;
Mat out = Mat(order + 1, 1, CV_32FC1);
Mat x1 = Mat(3, 1, CV_32F, xData);
Mat y2 = Mat(3, 1, CV_32FC1, yData);
polyfit(x1, y2, out, order);