0

I want to load an Image in OpenCV 4.5.3 and transfer that matrix over to Eigen 3.4 to compare methods of those two modules.

For example picture a code like this:

#include <Eigen/Dense>
#include <opencv2/core.hpp>
#include <opencv2/core/mat.hpp>
#include <opencv2/core/eigen.hpp>
#include <opencv2/imgcodecs.hpp>

#include <iostream>


int main() {
    std::clog << "loading image" << std::endl;

    cv::Mat image_matrix = cv::imread("testimage.png");

    if (image_matrix.empty()) {
        std::clog << "can't load image" << std::endl;

        return -1;
    }

    cv::Size size = image_matrix.size();
    int type = image_matrix.type();

    std::clog << "creating opencv matrix" << std::endl;

    cv::Mat cv_matrix(size, type);
    cv_matrix = image_matrix.clone();

    std::clog << "creating eigen matrix" << std::endl;

    Eigen::Matrix<uchar, Eigen::Dynamic, Eigen::Dynamic> eigen_matrix;
    eigen_matrix.resize(size.height, size.width);

    std::clog << "writing eigen matrix" << std::endl;

    cv::cv2eigen(image_matrix, eigen_matrix);

    std::clog << "done" << std::endl;

    return 0;
}

That code gives the following output:

loading image
creating opencv matrix
creating eigen matrix
writing eigen matrix
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.5.3) /home/nummer42o/Downloads/opencv/modules/core/src/copy.cpp:320: error: (-215:Assertion failed) channels() == CV_MAT_CN(dtype) in function 'copyTo'

Aborted (core dumped)

My problem is that I can't seem to make sense of it. Any ideas what could cause this? I already checked and the type of image_matrix is 16, so it's an CV_8UC3 meaning an 3-channel uchar (at least when fererring to this).

Nummer_42O
  • 334
  • 2
  • 16

0 Answers0