通过元素有效地分离和组合矢量

时间:2018-04-09 17:37:26

标签: opencv c++11 qt5

我有一个大的std :: vector,其中包含rgb(uint8_t)格式的图像数据。 我想要的是将通道分成新的r,g和b向量。 然后做一些算法并将它们重新组合成rgb向量。

我的问题是rgb向量在虚拟内存中是连续的,因此我可以将数据作为一个整体复制或自己访问每个元素,这很慢。 反之亦然,情况也是如此。

是否有一种有效的方式来访问这些元素?

这是我的问题的简短例子,以及我到目前为止所做的事情:

#include <cstdint>
#include <vector>

int main(int argc, char** argv)
{
    std::vector<uint8_t> rgb{1,2,3,4,5,6,7,8,9};
    std::vector<uint8_t> r, g, b;
    for (auto i=0; i<rgb.size()/3; ++i)
    {
        r.push_back(rgb.at(i*3));
        g.push_back(rgb.at(i*3+1));
        b.push_back(rgb.at(i*3+2));
    }
    std::vector<uint8_t> rgb_reconst;
    rgb_reconst.resize(rgb.size());
    for (auto i=0; i<rgb.size()/3; ++i)
    {
        rgb_reconst.at(i*3) = r.at(i);
        rgb_reconst.at(i*3+1) = g.at(i);
        rgb_reconst.at(i*3+2) = b.at(i);
    }
}

我可以访问Qt5和OpenCV来解决这个问题,但是我更喜欢一般的C ++ 11解决方案,因为这对其他问题也很有用。

0 个答案:

没有答案