如何从屏幕捕获图像并将它们与C ++中的已知图像进行比较?

时间:2013-02-17 15:13:53

标签: c++ image-processing captcha

为了看看是否可以轻松打破非常简单的CAPTCHA,我试图编写一个程序(尽可能简单和小)。我希望用C ++编写的这个程序应该执行以下操作:

  1. 制作屏幕已知区域的部分屏幕截图。 (假设CAPTCHA总是在完全相同的位置 - 例如:像素500-600 x,像素300-400 y)。

  2. 自动将CAPTCHA解剖为单个字母。 (我将为测试创建的CAPTCHAS将只有几个白色字母,总是在黑色背景上,间隔很远,以便让我轻松。)

  3. 程序然后将“剪切”字母与一组“已知”字母图像(看起来类似于验证码中使用的字母)进行比较,其中包含26个元素,每个元素都包含一个图像英文字母。

  4. 程序将字母与比较映射到的图像关联起来,然后将该密钥发送到控制台(通过std :: cout)

  5. 我的问题是:是否有一个易于使用的库(我只是编程的初学者),它可以处理任务1-3(4.很容易)?特别是第三点是我没有找到任何有价值的东西。理想的是,如果这个库有一个“得分”功能,使用浮点来表示图像有多相似。然后,得分最高的那个是最好的。 (即:100.0表示图像相同,29.56表示它们非常不同,等等。)

1 个答案:

答案 0 :(得分:0)

这个工作的好图书馆是OpenCV。 http://opencv.org

OpenCV具有所有必要的低级图像处理工具,可以分割验证码的不同元素。然后你可以使用它的模板匹配模块。

您甚至可以尝试直接检测字母而无需预处理。它会更慢,但验证码图像通常很小,它应该很少。看到: http://docs.opencv.org/modules/imgproc/doc/object_detection.html#cv2.matchTemplate

有关进入图书馆的一些教程,请参阅: http://docs.opencv.org/doc/tutorials/tutorials.html