gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:48 27 4
gpt4 key购买 nike

我正在尝试模拟一个 matlab 函数“imfill”来填充二进制图像(1 和 0 的二维矩阵)。

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

这是否已经存在于 C++ 世界的某个地方?如果不是,最有效的实现方式是什么?

最佳答案

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

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

// 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]);
}
}
}
}

关于二值图像的泛洪填充C++算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5941471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com