C++使用OpenCV实现多元线性回归及求回归系数
2024-01-08 19:55:01
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!