c - 在C中合并多个整数范围的数据结构和算法

标签 c algorithm merge data-structures

我正在处理一个计算机视觉问题,在这个问题中我必须合并图像的区域。区域(或 blob)由其行定义,即 O 的以下区域:

  0123456789
0 XXXXOXXXXX
1 XXXOOOXXXX
2 XXXOOXXXXX
3 XXXOXXXXXX
4 XXXXXXXXXX

定义为:

row: 0, cols: 4-4
row: 1, cols: 3-5
row: 2, cols: 3-4
row: 3, cols: 3-3

我选择这个数据结构是因为我需要能够快速找到一个区域的邻居,即“接触”它的所有像素。

现在,我的问题是我想合并两个区域,即计算它们的并集。这意味着我最终可能会在上面显示的数据结构中得到多个列范围。

有了这个设置,我有两个问题:

  1. C 中,此数据的最佳数据结构是什么?典型的图像是 16x16,这意味着没有那么多行/列。我会做很多合并(目标是从每个像素一个区域开始,到一个大区域结束,即 16x16 - 1 合并)。例如,我可以使用指针并分配/释放这些东西,或者使用 char* 存储列并在之后解析它。

  2. 如何高效合并两个区域?我需要找到相邻的潜在列以合并它们(例如,3-56-9 变成 3-9),最好而不必总是重新分配和复制东西。

最佳答案

如果您的数据是双色图像……黑色和白色,为什么不使用 16 个元素长的无符号短裤数组?

unsigned short image[16]

合并可以使用按位逻辑完成,这在 16 元素数组上非常有效。

关于c - 在C中合并多个整数范围的数据结构和算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2298138/

相关文章:

c++ - Xcode 上的 SDL2 代码设计问题

c - C语言中的IEEE 754转十进制

algorithm - 快速傅里叶变换多项式乘法?

git - Git 中的错误 merge 冲突解决方案。重试错误的提交,保留此后的更改吗?

git - 在 git merge 之后在 git log graph 中保留分支的提交历史

c popen 不会捕获 stderr

c - 了解程序中变量的多重声明和 GCC 编译器行为

mysql - 将 MediaWiki 内容合并在一起

算法:如何将固定长度圆形数组中的新元素与现有元素尽可能远离?

python - 比较值的替代方法