cv::MatとEigen::Matrixの相互変換
cv::MatからEigen::Matrixへの変換
#include <iostream>
#include <Eigen/Core>
#include <opencv2/core/core.hpp>
#include <opencv2/core/eigen.hpp>
int
main(int argc, char *argv[])
{
// 3x3, double の行列
Eigen::Matrix3d eigen_mat;
eigen_mat << 1.1, 1.2, 1.3,
2.1, 2.2, 2.3,
3.1, 3.2, 3.3;
cv::Mat cv_mat;
// convert from Eigen::Matrix to cv::Mat
cv::eigen2cv(eigen_mat, cv_mat);
std::cout << "cv_mat:\n" << cv_mat << std::endl << std::endl;
std::cout << "eigen_mat:\n" << eigen_mat << std::endl << std::endl;
}
実行結果:
cv_mat:
[1.1, 1.2, 1.3;
2.1, 2.2, 2.3;
3.1, 3.2, 3.3]
eigen_mat:
1.1 1.2 1.3
2.1 2.2 2.3
3.1 3.2 3.3
Eigen::Matrixからcv::Matへの変換
#include <iostream>
#include <Eigen/Core>
#include <opencv2/core/core.hpp>
#include <opencv2/core/eigen.hpp>
int
main(int argc, char *argv[])
{
// 3x3 の行列
cv::Mat cv_mat = (cv::Mat_<double>(3,3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
Eigen::Matrix<double, 3, 3> eigen_mat1; // コンパイル時に行列サイズが既知の場合
// convert from cv::Mat to Eigen::Matrix
cv::cv2eigen(cv_mat, eigen_mat1);
std::cout << "cv_mat:\n" << cv_mat << std::endl << std::endl;
std::cout << "eigen_mat1:\n" << eigen_mat1 << std::endl << std::endl;
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> eigen_mat2; // 動的な行列
// convert from cv::Mat to Eigen::Matrix
cv::cv2eigen(cv_mat, eigen_mat2);
std::cout << "eigen_mat2:\n" << eigen_mat2 << std::endl << std::endl;
}
実行結果:
cv_mat:
[1, 2, 3;
4, 5, 6;
7, 8, 9]
eigen_mat1:
1 2 3
4 5 6
7 8 9
eigen_mat2:
1 2 3
4 5 6
7 8 9
参考
cv::Matの基本処理
http://opencv.jp/cookbook/opencv_mat.html#cv-mateigen-matrix
0 件のコメント:
コメントを投稿