如何在c++中通过OpenCV实现poly1d

How to implement poly1d in C++ via OpenCV?

本文关键字:OpenCV 实现 poly1d c++      更新时间:2023-10-16

我知道polyfit的函数是一个行拟合函数,在Python中返回"y=ax+b"行来拟合给定的点。

在c++中,我使用OpenCV函数fitLine,它返回由4个参数((vx, vy, x0, y0)表示的直线,其中(vx, vy)是与直线共线的归一化向量,(x0, y0)是直线上的一个点。

但是我不能理解poly1d函数。而且我无法通过OpenCV和c++实现它。

如何实现poly1d并使用fitLine函数的返回值?

lineModel = np.poly1d(np.polyfit([y1, y2], [x1, x2], 1))

也许这有点偏离问题,但如果您使用的是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);