OCR& OpenCV:高分辨率图像上两帧之间的差异

时间:2015-12-15 10:45:15

标签: c++ opencv ocr run-length-encoding

根据这篇文章OCR: Difference between two frames,我现在知道如何使用OpenCV查找两个图像之间的像素差异。

我想改进此解决方案,并将其与具有丰富内容的高分辨率图像(来自视频)一起使用。上面的示例不适用于大图像,因为该过程会变慢(发现的差异太大," findCountours方法"填充选项卡的250k元素需要花费大量时间来处理)。

我的应用程序使用RLE解码器解码视频的压缩帧。一旦帧被解码,我想将当前帧与前一帧进行比较,以便将两帧之间的差异存储在" Mat"例如,标签。

所有这一切的目标是能够对不同的像素执行分析并检查是否有任何拉丁字符。这使我可以减少要分析的像素数量并节省宝贵的时间。

如果有人有其他想法而不是这个想法来执行此类操作,请随意提出。

感谢您的帮助。

编辑1: 计算机屏幕的两个高分辨率图像的示例。这些目前是我试图分析的完美例子。正如我们所看到的那样,两个大图像之间只有一个窗口,我想分析新的"挑战"任何角色的窗口。

First image

Second image

编辑2: 我试图根据分析的数据调整算法。通常在以下两张图片中我只得到绿线作为差异而根本没有文字(这是最有趣的)。我试图更好地了解事情是如何运作的。

第一张图片

TestImg1

第二张图片

TestImg2

第3张图片ResultImg

正如你所看到的那样,我只有那些绿线而不是文字(在减少计数时我最多只能有一个字母[i] .size())

1 个答案:

答案 0 :(得分:1)

除了你提到的帖子,还需要:

  • 当您对掩码进行二值化时,请使用高于0的阈值来消除小的差异。
  • 去掉一些噪音。您可以找到所有已连接的组件,并删除较小的组件。
  • 找到较大连接组件的区域。您可以使用contentOffsetconvexHull来获取屏幕上不同对象的掩码
  • 使用给定的面具将第二张图像复制到新图像。

结果如下:

enter image description here

代码:

fillConvexPoly