gpt4 book ai didi

c++ - cv::split 或 Eigen::Stride:哪个更有效地将多 channel 矩阵从 OpenCV 映射到 Eigen 结构

转载 作者:行者123 更新时间:2023-11-28 02:27:23 24 4
gpt4 key购买 nike

我正在映射多 channel OpenCV cv::MatEigen::Matrix .我想到了几种方法来做到这一点。为了示例忽略行优先与列优先,第一个是:

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

第二种是先在 OpenCV 中拆分 channel ,然后映射每个单独的 cv::Mat:

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

哪种方法更有效?

或者,是否有我没有考虑过的完全不同的东西?

最佳答案

正如您所指出的,您的第一种方法是矩阵映射。您的第二个示例是 cv 矩阵的拷贝 的映射(split 函数 copies )。因此,第一种方法会更有效。

关于c++ - cv::split 或 Eigen::Stride:哪个更有效地将多 channel 矩阵从 OpenCV 映射到 Eigen 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30067108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com