【问题标题】:Boost: iterating over an image regionBoost:迭代图像区域
【发布时间】:2011-09-25 00:32:57
【问题描述】:

我有一些我不拥有的图像,带有相邻的单色像素,我目前使用哑指针增量对其进行迭代。

我现在需要迭代 2D 区域,因此我正在考虑提供高效且易于编写的迭代器的最佳方法。

我只需要 forward_iterator。如果我有一个 10x10 的图像并且我想在 4x3 的左上角区域进行迭代,它将在这些元素上进行迭代:

0 1 2 3 10 11 12 13 20 21 22 23

我有两个选择:

  • boost::iterator_facade手写
  • 使用boost::range_iterator,它给了我一个数组迭代器,并用boost::iterator_adaptor修改它的行为

你觉得哪个最好?

【问题讨论】:

  • 我没有使用后一种机制,但iterator_facade 使用起来非常简单......
  • 如果用户可以选择增加哪个坐标,对用户来说会很方便。因此,++iter.x++iter.y 将分别增加 xy 坐标,++iter 将移动迭代器以最终扫描整个二维区域,*iter 将取消引用迭代器和产生像素。我没有具体的想法如何实现它。
  • @rwong 好主意,但我真的不需要指定是按行还是按列迭代。我只需要逐行,因为它的缓存效率更高
  • 你“不拥有”这些图片是什么意思?
  • @JonasHeidelberg:我的意思是我不负责分配图像的内存,外部库为我提供了指针

标签: c++ arrays boost iterator boost-iterators


【解决方案1】:

您有两个概念:(i) 子图像和 (ii) 图像上的一维迭代器。

我会先看看vil_image_view in the VXL library

这将图像数据的概念与数据的表示(视图)分开。该视图提供istepjstepplanestep 增量和像素索引。可以创建不同的vil_image_views 来表示来自相同基础数据的裁剪图像。这个库只与 STL 部分兼容,一个好的 STL 实现会很有趣,但我不确定在 STL 中实现二维迭代器的干净方法。

【讨论】:

  • 谢谢Adrian,好久没看VXL了,去看看
猜你喜欢
  • 1970-01-01
  • 2011-07-03
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2021-01-07
  • 2013-05-12
相关资源
最近更新 更多