给定一个 Int 数组,一个 Argb32 图像,我怎样才能以最好的方式将它加载到 Eigen Matrixes 中?
目标是创建一个小型图像处理库。作为第一部分,我想从 RGB 转换为灰度。
有没有任何方法可以将 int[] 加载到 3 个特征矩阵中而无需任何内存复制?
(当提到特征时,它的线性代数库)。
给定一个 Int 数组,一个 Argb32 图像,我怎样才能以最好的方式将它加载到 Eigen Matrixes 中?
目标是创建一个小型图像处理库。作为第一部分,我想从 RGB 转换为灰度。
有没有任何方法可以将 int[] 加载到 3 个特征矩阵中而无需任何内存复制?
(当提到特征时,它的线性代数库)。
是的,使用具有适当内部跨度的 Map<> 类,例如:
unsigned char* data = ...;
int w, h; // the width and height
typedef Map<Matrix<unsigned char,Dynamic,Dynamic>, 0, InnerStride<4> > Slide;
Slice red(data, w, h), green(data+1, w, h), blue(data+2, w, h);
然后你就可以开始玩它们了,例如,构造一个灰度浮点版本:
MatrixXf gray = (red.cast<float>() * 11 + green.cast<float>() * 16 + blue.cast<float>() * 5)/(32.*255.);