我坚持我的评估。我得到了一个位图及其尺寸(行和列),如下所示:
4 5
0 0 1 1 1
0 0 1 0 1
1 0 1 1 1
1 1 1 1 1
任务是找到水平和垂直最长的直线和一个正方形(全部由 1 组成)。我只需要水平线的第一脚。
我已将位图放入一维数组中,但我不知道下一步。
上图输出的是最长水平线的坐标:
3 0 3 4
非常感谢您的帮助。
最佳答案
您必须将 header 提取到结构中,并将数据提取到数组中,例如 a[]。
令 R 和 C 为图像的行数和列数。对于给定的数组 a[],图像的每一行都从 a[C*i] 开始,其中 i 是行号。所以你可以用 i 索引行,并用 C*i+j 访问该行中的每一位,j 小于 C。接下来你需要对每一行进行 processing
以找到长度最长的水平线。对此的小改动可用于索引列 j 并找到最长的垂直线。
做我上面说的处理,创建一个点结构
struct point
{
int x;
int y;
}p1, p2;
同时创建一个名为 lenh
的变量,它将包含找到的水平线的长度。还有用户变量 llenh
来存储最长的长度。对于由 (5i+j) 索引的行 (i, j) 中的每个顶点。将 llenh
设置为 0。从行开始,看到 1 更新 lenh
,并查看它是否大于 llenh
。如果是,更新 p1
点。看到 0 更新 p2
点并将 lenh
设置为 0,同时更新 llenh
。
我还没有完全修改这个。如果有任何错误,请评论..
关于c - 在 C 中的位图图像中查找水平线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20443372/