自学内容网 自学内容网

C++使用OpenCV实现多元线性回归及求回归系数

C++使用OpenCV实现多元线性回归及求回归系数

之前准备使用Eigen库,但是我需要将C++封装成dll供C#调用,而Eigen是lib编译的,不像OpenCV有编译好的dll方便,因此使用OpenCV的函数解决。

/**
 * @brief : 多元线性回归
 * @param : x, 自变量
 * @param : y, 因变量
 * @param : w, 自变量列数
 * @param : h, 自变量/因变量行数
 * @param : res, 多元线性回归系数
 * @param : precision, 保留小数位
 */
void MultipLelinearRegression(double *x, double *y, int w, int h, double *res, int precision)
{
cv::Mat xm(h, w, CV_64FC1, x);
cv::Mat ym(h, 1, CV_64FC1, y);
cv::Mat coefficients;
cv::solve(xm, ym, coefficients, cv::DECOMP_NORMAL | cv::DECOMP_LU);

int rows = coefficients.rows;
int cols = coefficients.cols;
if (w == rows * cols)
{
std::cout << precision << std::endl;
int idx = 0;
double curVal = 0;
if (precision != -1)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
curVal = coefficients.at<double>(i, j);
res[idx++] = floor((curVal * pow(10, precision) + 0.5)) / pow(10, precision);
}
}
}
else 
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
res[idx++] = coefficients.at<double>(i, j);
}
}
}
}
}

原文地址:https://blog.csdn.net/m0_56651882/article/details/135463522

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!