cv::Mat和eigen::vector3d的转换
时间: 2023-08-02 19:06:57 浏览: 260
你可以使用以下代码将 `cv::Mat` 转换为 `Eigen::Vector3d`:
```cpp
cv::Mat cv_mat; // 假设已经初始化并赋值
Eigen::Vector3d eigen_vec;
cv::cv2eigen(cv_mat, eigen_vec);
```
这里使用了OpenCV的 `cv2eigen` 函数来进行转换。注意,需要确保 `cv_mat` 是 3x1 的矩阵,否则转换将失败。
相反,要将 `Eigen::Vector3d` 转换为 `cv::Mat`,你可以使用以下代码:
```cpp
Eigen::Vector3d eigen_vec; // 假设已经初始化并赋值
cv::Mat cv_mat = cv::Mat::zeros(3, 1, CV_64FC1);
cv::eigen2cv(eigen_vec, cv_mat);
```
这里使用了OpenCV的 `eigen2cv` 函数来进行转换。同样需要注意,如果你的 `cv_mat` 不是 3x1 的矩阵,转换也会失败。
相关问题
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`中的数据是按列存储的,因此在进行转换时需要注意维度的匹配。
阅读全文