如何将 Argb32 加载到特征矩阵中以获得最佳性能?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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 类型中。

以上是关于如何将 Argb32 加载到特征矩阵中以获得最佳性能?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 A16B16G16R16F 转换为 ARGB32?

NEON:如何将 128 位 ARGB 转换为具有饱和度的 32 位 ARGB?

使用 numpy 将 csv 加载到二维矩阵中以进行绘图

用于灰度到 ARGB 转换的 C++ SSE2 或 AVX2 内在函数

您如何将 2D 矩阵表示为输入状态,并让它选择它认为对该状态最佳操作的行的索引?

如果使用 Python 已知矩阵元素的范围,如何获得符号矩阵的数值特征向量?