Merge pull request #13456 from alalek:fix_eigen2cv_type_check

pull/13474/head^2
Alexander Alekhin 6 years ago
commit 82b7803a7a
  1. 2
      modules/core/include/opencv2/core/eigen.hpp
  2. 24
      modules/core/test/test_mat.cpp

@ -60,7 +60,7 @@ namespace cv
//! @{ //! @{
template<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols> static inline template<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols> static inline
void eigen2cv( const Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& src, Mat& dst ) void eigen2cv( const Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& src, OutputArray dst )
{ {
if( !(src.Flags & Eigen::RowMajorBit) ) if( !(src.Flags & Eigen::RowMajorBit) )
{ {

@ -3,6 +3,12 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#ifdef HAVE_EIGEN
#include <Eigen/Core>
#include <Eigen/Dense>
#include "opencv2/core/eigen.hpp"
#endif
namespace opencv_test { namespace { namespace opencv_test { namespace {
class Core_ReduceTest : public cvtest::BaseTest class Core_ReduceTest : public cvtest::BaseTest
@ -1972,4 +1978,22 @@ TEST(Core_Vectors, issue_13078_workaround)
ASSERT_EQ(7, ints[3]); ASSERT_EQ(7, ints[3]);
} }
#ifdef HAVE_EIGEN
TEST(Core_Eigen, eigen2cv_check_Mat_type)
{
Mat A(4, 4, CV_32FC1, Scalar::all(0));
Eigen::MatrixXf eigen_A;
cv2eigen(A, eigen_A);
Mat_<float> f_mat;
EXPECT_NO_THROW(eigen2cv(eigen_A, f_mat));
EXPECT_EQ(CV_32FC1, f_mat.type());
Mat_<double> d_mat;
EXPECT_ANY_THROW(eigen2cv(eigen_A, d_mat));
//EXPECT_EQ(CV_64FC1, d_mat.type());
}
#endif // HAVE_EIGEN
}} // namespace }} // namespace

Loading…
Cancel
Save