C++ 犰狳错场索引
我需要构建一个由(R,G,B)像素组成的三维立方体,这样R,G和B的值就等于它们在立方体中的索引 例如,在立方体[0,0,0]处,我应该找到黑色的像素(0,0,0),在立方体[255255]处,像素值应该是(255255)或白色。 实际上,立方体应该以8位存储所有可能的颜色 为了实现这一点,我看到犰狳库具有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
字段
类型。
因此,我认为将每个像素存储在列中并从中构建和填充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代码>和它将工作