1. 能利用数组初始化Mat类型矩阵吗?
2.为什么要用数组初始化Mat矩阵,以及什么情况下使用,使用数组初始化Mat矩阵的条件是什么?
3.怎么利用指针访问Mat矩阵,是怎么进行的?
答:是为了使用方便,直接利用数组索引对矩阵赋值,感觉也可以用Mat_类,访问和赋值也方便
新建一个Mat,求椭圆方程函数 f(x,y)=Ax2+Bxy+Cy2+Dx+Ey+F:
cv::Mat CEllipse::NormEllipseParams(cv::RotatedRect box)
{
double params[6];
cv::Mat rst(1, 6, CV_64FC1, params);//椭圆的六个参数
double theta = box.angle / 180 * CV_PI;
double st = sin(theta);
double ct = cos(theta);
double a = box.size.width / 2;//长半轴
double b = box.size.height / 2;//短半轴
double a2 = a * a;
double b2 = b * b;
double x0 = box.center.x;//椭圆中心
double y0 = box.center.y;
double xcys = x0 * ct + y0 * st;//坐标转换
double xsyc = x0 * st - y0 * ct;
params[0] = ct * ct / a2 + st * st / b2;
params[1] = 2 * st * ct * (1 / a2 - 1 / b2);
params[2] = st * st / a2 + ct * ct / b2;
params[3] = -2 * (ct * xcys / a2 + st * xsyc / b2);
params[4] = -2 * (st * xcys / a2 - ct * xsyc / b2);
params[5] = xcys * xcys / a2 + xsyc * xsyc / b2 - 1;
return rst.clone();//返回A-F六个参数
}
获取Mat中的六个参数:
double *data = ellipse.ptr<double>(0);//获取第一行的首地址
double A = data[0], B = data[1], C = data[2], D = data[3], E = data[4], F = data[5];