利用指针访问opencv 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];

参考:https://blog.csdn.net/mightbxg/article/details/79121569

猜你喜欢

转载自blog.csdn.net/vict_wang/article/details/81071018