找到2张图片之间的相同区域

时间:2013-06-01 12:17:49

标签: c++ c image

我想合并2张图片。如何删除2张图像之间的相同区域?

你能告诉我一个算法来解决这个问题。感谢。

enter image description here

两个图像是屏幕截图图像。它们具有相同的宽度,图像1总是高于图像2。

result

3 个答案:

答案 0 :(得分:3)

当两个图像具有相同的宽度并且左侧没有X偏移时,这应该不会太困难。

您应该创建两个整数向量,并将每个像素行的CRC存储在相应的向量元素中。对两张图片执行此操作后,您会在第一个矢量中找到下图像第一行的CRC。这是上图中的偏移量。然后检查两张图片中的所有后续CRC是否相同。如果没有,则必须再次在上图中查找下一次出现的初始CRC。

在应用偏移后检查两张图片之间的CRC是否相同后,您可以使用图形格式的bitblit功能并构建合成图片。

答案 1 :(得分:0)

我之前没有遇到类似的事情,但我认为以下内容可能有效:

  • 将两者都转换为灰度。

  • 增强对比度,灰色框可能会变为白色,文字会变成更黑。。 (这只是为了增加下一步的信心)

  • 应用一些阈值,将图片转换为黑白。

之后,您可以找到相似的区域(因此重叠的偏移)具有良好的置信度。要找到相似的部分,你可以使用harper的方法(这很好,但我不知道没有上述过滤会有多可靠),或者你可以应用像卷积这样的DSP操作。

希望有所帮助。

答案 2 :(得分:0)

如果您的图片宽度相同,图片1 始终位于顶部。我不明白它有多难......

只需存储图像1 的最后一行的字节。

image 2 的第一行到最后一行进行此测试:

如果图像2 的当前行不等于图像1的最后一行 - > 继续 别的 - > 打破循环

您必须为新图像定义新的字节容器: 只需存储图像1 的所有行+ image 2 的所有行(从找到的行+ 1开始)。

让您大汗淋漓的是找到库来操纵所有这些数据结构。但经过一些链接和文档挖掘之后,您应该能够轻松实现它。