我得到一个uint8_t *数组(已定义固定)并希望将它们与Eigen3矩阵一起使用。
我开始使用
typedef Eigen::Matrix<uint8_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix8u;
memcpy
到.data()
但后来我注意到例如.sum()
我得到了溢出。
有没有办法在uint8_t *
和int32_t之间进行快速复制? - 与Eigen :: Map?
问候
答案 0 :(得分:2)
我会使用Eigen :: Map将您的数组映射到Matrix8u,然后将其转换为类似Matrix32i的内容。
假设您的数据采用数组数据[] = {0,1,2,...}的形式,这里是示例代码:
typedef Eigen::Matrix<uint8_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix8u;
typedef Eigen::Matrix<int32_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix32i;
uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
Matrix32i m32i = Eigen::Map<Matrix8u>(data, rows, cols).cast<Matrix32i::Scalar>();
当然rows*cols
必须等于数据数组的长度。