【问题标题】:How to load Argb32 into Eigen Matrix for best performance?如何将 Argb32 加载到特征矩阵中以获得最佳性能?
【发布时间】:2013-01-27 13:21:11
【问题描述】:

给定一个 Int 数组,一个 Argb32 图像,我如何才能以最佳方式将其加载到 Eigen Matrixes 中?

目标是创建一个小型图像处理库。作为第一部分,我想从 RGB 转换为灰度。

有没有什么方法可以在不复制任何内存的情况下将 int[] 加载到 3 个特征矩阵中?

(当提到特征时,它是线性代数库)。

【问题讨论】:

    标签: c++ image-processing eigen


    【解决方案1】:

    是的,使用带有适当内跨步的 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.);
    

    【讨论】:

    • 不错。您能否添加有关切片类型 Map 的评论,它是否像矩阵一样工作。我可以做红+蓝+绿吗?还是需要先将其转换为浮点数。否则我会去 eigen doc 自己找到它:)
    • 是的,你可以添加红色+绿色+蓝色,但是使用 unsigned char 你会溢出。不过,您可以转换为 (unsigned) int 。您甚至可以将演员表隐藏到 Slice 类型中。
    猜你喜欢
    • 2013-05-06
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多