【发布时间】: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