eigen3类型从指针转换/复制(溢出uint8_t)

时间:2015-03-27 09:39:47

标签: c++ eigen3

我得到一个uint8_t *数组(已定义固定)并希望将它们与Eigen3矩阵一起使用。

我开始使用

typedef Eigen::Matrix<uint8_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix8u;

memcpy.data()

但后来我注意到例如.sum()我得到了溢出。

有没有办法在uint8_t *和int32_t之间进行快速复制? - 与Eigen :: Map?

问候

1 个答案:

答案 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必须等于数据数组的长度。