Я пытаюсь использовать Eigen для взаимодействия с неподписанными типами char *.Я могу конвертировать в Eigen, а затем плавать, но когда я конвертирую обратно в unsigned char , результат будет неправильным.Мне нужно, чтобы матрица Eigen имела тип float, чтобы я могла выполнять арифметические операции над ней.Затем мне нужно вернуть его к unsigned char , чтобы я мог сохранить его.
#include <Eigen/Dense>
#include <iostream>
int main(){
unsigned char* data;
for (int i=0;i<9;++i){
data[i]= i;
}
//Map data to Eigen
Map<Matrix<unsigned char,3,3> ,RowMajor> img(data,3,3);
//Convert to float
MatrixXf gray = img.cast<float>();
//Convert back to unsigned char*
float *gray_array = gray.data();
unsigned char *gray_UC = (unsigned char*)gray_array;
std::cout<<"Eigen matrix converted to unsigned char:"<<(float)*(gray_UC+1)<<std::endl;
std::cout<<"Eigen matrix as float: "<<*(gray_array+i)<<std::endl;
std::cout<<"Original data converted to float: "<<(float)*(data+1)<<std::endl;
}
Данные, имеющие тип unsigned char *.
Я ожидаю, что gray_UC и данные будутто же самое, но это не так.Более того, gray_array печатает правильное значение с плавающей запятой, так что это может быть неправильное преобразование в unsigned char.