首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Armadillo错误的字段索引

Armadillo错误的字段索引
EN

Stack Overflow用户
提问于 2020-09-12 18:41:51
回答 1查看 32关注 0票数 0

我需要构建一个(R,G,B)像素的3d立方体,以便R,G和B的值等于它们在立方体中的索引。

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

为此,我已经看到Armadillo库具有field类型。因此,我认为将每个像素存储在Col<size_t>中并从中构建和填充3D字段是合理的,如下所示:

代码语言:javascript
运行
复制
#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 Studio2017。

EN

回答 1

Stack Overflow用户

发布于 2020-09-13 05:54:48

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;,它将起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63859473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档