c++ - 如何将 Argb32 加载到 Eigen Matrix 中以获得最佳性能?

标签 c++ image-processing eigen

给定一个 Int 数组、一个 Argb32 图像,我如何以最佳方式将其加载到特征矩阵中?

目标是创建一个小型图像处理库。作为第一部分,我想从 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.);

关于c++ - 如何将 Argb32 加载到 Eigen Matrix 中以获得最佳性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14547788/

相关文章:

javascript - 网站上的图像裁剪并与水印结合

python - OpenCV 未在图像上添加线和点

c++ - C++ 和 eigen3 的编译器错误

c++ - 如何围绕原点倾斜相机

c++ - 我们可以在通过调整类生成的随机访问序列上应用 boost::fusion::transform 吗?

c++ - 启动 std::thread 时无法将(函数指针)左值绑定(bind)到(函数指针)右值?

c++ - 没有全局运营商的裸机新

c++ - BB 10 Cascades 互联网检查

用于 2D 矩阵数据(图像)的 MATLAB 窗口 FFT

c++ - 如何将 Eigen::Matrix 映射到 std::vector<Eigen::vector>?