首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于二值图像泛洪填充的C++算法

用于二值图像泛洪填充的C++算法
EN

Stack Overflow用户
提问于 2011-05-10 03:23:48
回答 4查看 5.3K关注 0票数 1

我正在尝试模拟一个matlab函数"imfill“,用于泛洪填充一个二进制图像(由1和0组成的2D矩阵)。

我想在矩阵中指定一个起始点,并像4连通版本的imfill那样进行泛洪填充。

这在C++世界的某个地方已经存在了吗?如果没有,实现这一点的最有效方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-10 04:03:59

如果您的图像只是由1和0组成的2D数组,那么我认为您不需要实际的图形库。

当我在过去填充简单的网格时,我只是使用STL队列来存储点的列表,然后处理这些点。队列将从初始点开始,然后我将测试相邻的点。如果相邻的点需要包含在“泛洪”中,则将这些点添加到队列中。有点像这样:

代码语言:javascript
运行
复制
// using this data structure
struct Point {
  int x;
  int y;
};

// 
void fillGrid(Point orig, byte** grid, int width, int height) {
  std::queue<Point> q;
  q.push(orig);

  // the main flood loop
  while(!q.empty()) {
    Point pnt = q.front();
    q.pop();

    // grab adjacent points
    Point adj[4];
    adj[0].x = pnt.x;   adj[0].y = pnt.y-1;   // up
    adj[1].x = pnt.x+1; adj[1].y = pnt.y;     // right
    adj[2].x = pnt.x;   adj[2].y = pnt.y+1;   // down
    adj[3].x = pnt.x-1; adj[3].y = pnt.y;     // left

    for(int i = 0; i < 4; i++) {
      // don't forget boundaries!
      if(adj[i].x < 0 || adj[i].x >= width ||
         adj[i].y < 0 || adj[i].y >= height)
        continue;

      // if adjacent point meets some criteria, then set
      // its value and include it in the queue
      if(includePoint(adj[i], grid)) {
        setPoint(adj[i], grid);
        q.push(adj[i]);
      }
    }
  }
}
票数 4
EN

Stack Overflow用户

发布于 2011-05-10 03:35:18

如果你想在C++中进行图像处理,你必须研究一下OpenCV (开源计算机视觉)。

这是一个用于图像/视频处理的很好的跨平台库,它有你想要的东西。检查这个问题:

Fill the holes in OpenCV

票数 4
EN

Stack Overflow用户

发布于 2011-05-10 03:29:41

请参阅this page ('QuickFill: An efficient flood fill algorithm')上的代码示例

在前几个代码示例中,检查像素是否具有填充(或边框)颜色,并且函数递归地为所有四个(或八个)相邻像素调用自身(实际上,我声称前几个示例略有错误,因为第一个递归调用应该是对设置新像素的函数的调用,而不是使用完全相同的参数再次调用函数本身)。

接下来的几个例子描述了递归扫描线方法,它首先尽可能地填充(水平)线,然后再转到相邻的线(上面和下面的线),从而减少访问每个像素的频率。

最后,它提出了QuickFill,它在我看来像是扫描线方法的优化变体。

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

https://stackoverflow.com/questions/5941471

复制
相关文章

相似问题

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