C++ cv::split或Eigen::Stride:将多通道矩阵从OpenCV映射到Eigen结构时,哪个更有效
我正在将多通道OpenCV映射到。我想到了几种方法。忽略row-vs-column-major为了示例,第一个是:C++ cv::split或Eigen::Stride:将多通道矩阵从OpenCV映射到Eigen结构时,哪个更有效,c++,opencv,eigen,C++,Opencv,Eigen,我正在将多通道OpenCV映射到。我想到了几种方法。忽略row-vs-column-major为了示例,第一个是: Map<Matrix<double, Dynamic, Dynamic>, Stride<3,1>> R((double*)mat_cv.data); Map<Matrix<double, Dynamic, Dynamic>, Stride<3,1>> G((double*)mat_cv.data + 1);
Map<Matrix<double, Dynamic, Dynamic>, Stride<3,1>> R((double*)mat_cv.data);
Map<Matrix<double, Dynamic, Dynamic>, Stride<3,1>> G((double*)mat_cv.data + 1);
Map<Matrix<double, Dynamic, Dynamic>, Stride<3,1>> B((double*)mat_cv.data + 2);
哪种方法更有效
或者,有什么完全不同的东西我没有考虑过吗?正如您所指出的,您的第一种方法是矩阵的映射。第二个示例是
cv
矩阵(split
函数)的副本的映射。因此,第一种方法会更有效。我不太确定拆分函数是如何工作的。太好了,谢谢!
cv::Mat cv_mat;
std::vector<cv::Mat> channels;
cv::split(cv_mat, channels);
MatrixXd R = Map<Matrix<double, Dynamic, Dynamic>>((double*)channels[0].data, 10, 10);
MatrixXd G = Map<Matrix<double, Dynamic, Dynamic>>((double*)channels[1].data, 10, 10);
MatrixXd B = Map<Matrix<double, Dynamic, Dynamic>>((double*)channels[2].data, 10, 10);