犰狳错误的字段索引
Posted
技术标签:
【中文标题】犰狳错误的字段索引【英文标题】:Armadillo wrong field indexing 【发布时间】:2020-09-12 10:41:51 【问题描述】:我需要构建一个 (R,G,B) 像素的 3d 立方体,以使 R、G 和 B 的值等于它们在立方体中的索引。
例如,在 Cube[0,0,0] 我应该找到黑色的像素 (0,0,0),而在 Cube[255,255,255] 的像素值应该是 (255,255,255) 或白色。 在实践中,立方体应该以 8 位存储所有可能的颜色。
为了实现这一点,我看到 Armadillo 库具有 field
类型。
所以我认为将每个像素存储在 Col<size_t>
中并从中构建和填充 3D 字段是合理的,如下所示:
#include <armadillo>
typedef arma::Col<size_t> Pixel;
int nc = 256;
arma::field<Pixel> my_cube(nc, nc, nc);
for (size_t i = 0; i < nc; i++)
for (size_t j = 0; j < nc; j++)
for (size_t k = 0; k < nc; k++)
Pixel px = i, j, k ;
my_cube[i, j, k] = px;
my_cube[i, j, k].print(); // here I get the correct value for (i,j,k)
my_cube[0, 0, 0].print(); // here I get (255,255,0) instead of (0,0,0)
// If I try my_cube(0,0,0).print() or my_cube.at(0,0,0).print()
// I get the same wrong result for the (0,0,0) pixel and
// [matrix(0x1)] for different values of the indices.
但是,当我尝试在外循环之后访问一个元素时,我得到了错误的结果(参见上面的代码)。
有人可以解释这种行为吗?在 for 循环之后检索正确值时我缺少什么?
我本可以使用 OpenCV 轻松完成任务,但我正在编写的代码是我无法使用它的项目的一部分。
我正在使用 Armadillo 9.900 和 Visual Studio 2017。
【问题讨论】:
【参考方案1】:operator[]
仅适用于单个参数。所以my_cube[i, j, k]
是错误的。
您提到my_cube(0,0,0).print()
或my_cube.at(0,0,0).print()
也出现了同样的问题,但他们正在做正确的事情。但是,您还需要在分配期间使用它们中的任何一个。将my_cube[i, j, k] = px;
更改为my_cube(i, j, k) = px;
或my_cube.at(i, j, k) = px;
即可。
【讨论】:
以上是关于犰狳错误的字段索引的主要内容,如果未能解决你的问题,请参考以下文章
通过 Pandas 将 Excel 字段导入 Python 时遇到问题 - 索引越界错误
mongodb 3.4.2 InvalidIndexSpecificationOption 错误:字段“唯一”对于 _id 索引规范无效