【opencv13】cv::Matx固定矩阵类/cv::Vec固定向量类

1.固定矩阵类

固定矩阵类要在编译之前知道其维度,因此叫做“固定”。因此,这些数据都是保存在栈中,且清理也相当快,有专门为小型优化实现矩阵(2×2,3×3,等等)。在OpenCV的c++接口中,固定矩阵类也是许多其他基本类型的核心。固定向量类派生自固定矩阵类,其他类要么派生自固定向量类(如cv::Scalar),要么在许多重要操作中依赖于转换到固定向量类。像往常一样,固定矩阵类实际上是一个模板。该模板被称为cv::Matx<>,但是单个矩阵通常通过别名分配,别名的组合方式有 c v : : M a t x { 1 , 2 , 3 , 4 , 6 } { 1 , 2 , 3 , 4 , 6 } { f , d } cv::{Matx}{\{1,2,3,4,6\}\{1,2,3,4,6\}\{f,d\}} cv:

OpenCV中,`cv::getPerspectiveTransform()` 函数用于计算两个图像之间的透视变换矩阵,这个矩阵并不直接包含旋转向量和平移向量的信息。但是,如果你想将透视变换分解成旋转、缩放和平移操作,可以使用另一种方法,比如通过计算齐次坐标系下的变换矩阵。 首先,你需要了解透视变换矩阵是由四个线性变换组成的,其中三个旋转和缩放,另一个表示平移。然而,OpenCV的标准库并未提供直接解包这样的功能。但你可以手动做一些数学处理,这通常涉及到利用矩阵的特殊结构。 这里是一个基本的例子,假设你已经有了4x4的透视变换矩阵 `M`: ```cpp #include <opencv2/core.hpp> #include <opencv2/calib3d.hpp> // 假设 M 是一个 cv::Mat 对象,代表了透视变换矩阵 // 将矩阵转换为3x3部分,去除最后一行和列(因为它们分别代表平移和深度信息) cv::Mat M_3x3 = M(cv::Range(0, 3), cv::Range(0, 3)); // 抽取出旋转和缩放的部分(需要进一步处理) cv::Mat rotation_matrix, scale_matrix; cv::Rodrigues(M_3x3, rotation_matrix); // 使用Rodrigues函数近似估计旋转角度,不是完全精确的 scale_matrix = M_3x3 / cv::Mat::eye(3, 3); // 简单地除以单位矩阵得到缩放比例 // 平移向量可以通过减去透视变换矩阵的最后一行得到 cv::Point2f translation(-M.at<float>(2, 0), -M.at<float>(2, 1)); // 注意这是原点相对于新坐标系的偏移 std::cout << "Rotation matrix:\n" << rotation_matrix << std::endl; std::cout << "Scale matrix:\n" << scale_matrix << std::endl; std::cout << "Translation vector:\n" << translation << std::endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanCruise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值