eigen3 类型转换/从指针复制(溢出 uint8_t)
eigen3 type cast / copy from pointer (overflow uint8_t)
我得到一个 uint8_t * 数组(固定定义)并想将它们与 Eigen3 矩阵一起使用。
我开始使用
typedef Eigen::Matrix<uint8_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix8u;
从 memcpy
到 .data()
但后来我注意到,例如 .sum()
我溢出了。
有没有办法在 uint8_t *
和 int32_t 之间进行快速复制? - Eigen::Map ?
问候
我会使用 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
必须等于数据数组的长度。
我得到一个 uint8_t * 数组(固定定义)并想将它们与 Eigen3 矩阵一起使用。
我开始使用
typedef Eigen::Matrix<uint8_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix8u;
从 memcpy
到 .data()
但后来我注意到,例如 .sum()
我溢出了。
有没有办法在 uint8_t *
和 int32_t 之间进行快速复制? - Eigen::Map ?
问候
我会使用 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
必须等于数据数组的长度。