【问题标题】:How to convert a cv::Mat Image to an std::vector if the Image is not continuous?如果图像不连续,如何将 cv::Mat 图像转换为 std::vector?
【发布时间】:2013-06-01 07:58:24
【问题描述】:

我尝试寻找解决方案并遇到了这个链接 Converting a row of cv::Mat to std::vector 。但是,这里的答案只有在图像是连续的情况下才有效,即行的长度 = 步长。我是对的还是我错过了什么?如果我是对的,将非连续图像复制到 std::vector 的最有效方法是什么?

我正在寻找比,更有效的东西,

for(int ii=0;ii<no. of image rows;ii++)
{
    ptr = pointer to ii'th row
    copy from ptr to (ptr+row length) into std::vector
}

谢谢,

维希

【问题讨论】:

  • 我认为您遗漏了某些东西(或者可能是我遗漏了一些东西),我不明白为什么会出现问题。
  • 考虑 800 * 300(8 位单通道)图像。此图像由 800*300 = 240000 像素组成。我发布的链接表明,从图像的基地址开始,我可以将接下来的 240000 个地址位置复制到一个向量,并将 cv::Mat 转换为 std:vector。但是,如果图像被填充,那么一行的长度将是 800+p(800 个实际值和 'p' 填充值。这意味着如果现在我将接下来的 240000 个地址盲目地复制到向量中,那么我最终会得到很多垃圾值。这有意义吗?
  • 你拥有的已经足够好了。我认为没有更有效的方法。
  • 您为什么要这样做?您可以在不复制数据的情况下获取 cv::Mat 中行的迭代器...
  • @Hammer :嗯,我想将图像数据放入一个矢量中,以便我可以使用标准矢量方法对其进行操作。在任何情况下,迭代器的建议都很好。我现在可以使用 this

标签: opencv


【解决方案1】:

对于单通道 8 位图像,

std::vector<uchar> dstVec;
dstVec.assign(srcVec.begin(),srcVec.end()); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2015-02-17
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多