我正在处理一个计算机视觉问题,在这个问题中我必须合并图像的区域。区域(或 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
我选择这个数据结构是因为我需要能够快速找到一个区域的邻居,即“接触”它的所有像素。
现在,我的问题是我想合并两个区域,即计算它们的并集。这意味着我最终可能会在上面显示的数据结构中得到多个列范围。
有了这个设置,我有两个问题:
在
C
中,此数据的最佳数据结构是什么?典型的图像是 16x16,这意味着没有那么多行/列。我会做很多合并(目标是从每个像素一个区域开始,到一个大区域结束,即 16x16 - 1 合并)。例如,我可以使用指针并分配/释放这些东西,或者使用 char* 存储列并在之后解析它。如何高效合并两个区域?我需要找到相邻的潜在列以合并它们(例如,
3-5
和6-9
变成3-9
),最好而不必总是重新分配和复制东西。
最佳答案
如果您的数据是双色图像……黑色和白色,为什么不使用 16 个元素长的无符号短裤数组?
unsigned short image[16]
合并可以使用按位逻辑完成,这在 16 元素数组上非常有效。
关于c - 在C中合并多个整数范围的数据结构和算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2298138/