利用指针访问opencv Mat类型的矩阵,以及求椭圆方程的函数

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];

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值