Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 犰狳错场索引_C++_Armadillo - Fatal编程技术网

C++ 犰狳错场索引

C++ 犰狳错场索引,c++,armadillo,C++,Armadillo,我需要构建一个由(R,G,B)像素组成的三维立方体,这样R,G和B的值就等于它们在立方体中的索引 例如,在立方体[0,0,0]处,我应该找到黑色的像素(0,0,0),在立方体[255255]处,像素值应该是(255255)或白色。 实际上,立方体应该以8位存储所有可能的颜色 为了实现这一点,我看到犰狳库具有字段类型。 因此,我认为将每个像素存储在列中并从中构建和填充3D字段是合理的,如下所示: #include <armadillo> typedef arma::Col<siz

我需要构建一个由(R,G,B)像素组成的三维立方体,这样R,G和B的值就等于它们在立方体中的索引

例如,在立方体[0,0,0]处,我应该找到黑色的像素(0,0,0),在立方体[255255]处,像素值应该是(255255)或白色。 实际上,立方体应该以8位存储所有可能的颜色

为了实现这一点,我看到犰狳库具有
字段
类型。 因此,我认为将每个像素存储在
列中并从中构建和填充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.
#包括
typedef arma::Col像素;
int nc=256;
arma::字段my_cube(nc,nc,nc);
对于(尺寸i=0;i
然而,当我尝试在外循环之后访问一个元素时,我得到了错误的结果(参见上面的代码)

有人能解释一下这种行为吗?在for循环之后,我缺少什么来检索正确的值

我本可以用OpenCV轻松完成这项任务,但我正在编写的代码是我无法使用的项目的一部分


我使用的是Armadillo 9.900和Visual Studio 2017。

操作符[]
仅适用于单个参数。因此,
my_cube[i,j,k]
是错误的

您提到
my_cube(0,0,0).print()
my_cube.at(0,0,0).print()
也显示了相同的问题,但他们做的是正确的。但是,您也需要在作业期间使用其中一个。更改
my_cube[i,j,k]=px
我的立方体(i,j,k)=px
my_cube.at(i,j,k)=px和它将工作