cv::Mat和eigen::vector3d的转换
时间: 2023-07-02 08:22:43 浏览: 299
将cv::Mat转换为eigen::Vector3d:
```c++
cv::Mat mat(3, 1, CV_64F); // 3行1列的64位浮点型矩阵
mat.at<double>(0,0) = 1.0;
mat.at<double>(1,0) = 2.0;
mat.at<double>(2,0) = 3.0;
Eigen::Vector3d vec;
cv::cv2eigen(mat, vec);
```
将eigen::Vector3d转换为cv::Mat:
```c++
Eigen::Vector3d vec(1.0, 2.0, 3.0);
cv::Mat mat = cv::Mat::zeros(3, 1, CV_64F);
cv::eigen2cv(vec, mat);
```
需要注意的是,这里的cv::Mat和Eigen::Vector3d的数据类型都是双精度浮点型(CV_64F),如果需要其他数据类型的转换,需要相应地修改代码。
相关问题
eigen::vector3d 转换为cv::Mat的函数
可以使用以下函数将Eigen::Vector3d转换为cv::Mat:
```
cv::Mat eigen2cv(const Eigen::Vector3d& eigen_vec)
{
cv::Mat cv_vec = (cv::Mat_<double>(3, 1) << eigen_vec[0], eigen_vec[1], eigen_vec[2]);
return cv_vec;
}
```
该函数将Eigen::Vector3d类型的向量转换为3x1的cv::Mat类型的向量。
Eigen::Vector3f转换成cv::Mat
可以使用`cv::Mat`的构造函数将`Eigen::Vector3f`转换成`cv::Mat`,如下所示:
```cpp
Eigen::Vector3f vec;
// 假设已经给vec赋值
cv::Mat mat = cv::Mat(vec);
```
此时得到的`mat`是一个3行1列的单通道浮点型矩阵,每个元素分别对应`vec`中的每个分量。如果需要得到一个单行或单列的矩阵,可以使用`cv::Mat`的`reshape()`函数进行转换,如下所示:
```cpp
// 将3行1列的矩阵转换为3列1行的矩阵
cv::Mat mat_col = mat.reshape(1, 3);
// 将3行1列的矩阵转换为1行3列的矩阵
cv::Mat mat_row = mat.reshape(1, 1);
```
注意,`Eigen::Vector3f`和`cv::Mat`中的数据是按列存储的,因此在进行转换时需要注意维度的匹配。
阅读全文