Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cv::split或Eigen::Stride:将多通道矩阵从OpenCV映射到Eigen结构时,哪个更有效_C++_Opencv_Eigen - Fatal编程技术网

C++ cv::split或Eigen::Stride:将多通道矩阵从OpenCV映射到Eigen结构时,哪个更有效

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);

我正在将多通道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>> 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);