我们想要一个c#解决方案来校正扫描图像,因为它是旋转的。要解决这个问题,我们必须首先检测旋转角度,然后旋转图像。这是我们对我们问题的第一个想法。但后来我们认为图像变形会更准确,因为我认为它会使扫描图像像我们的模板一样。然后我们可以处理它,因为我们知道模板的所有坐标...我在c#中搜索了一个免费的SDK或免费的解决方案。在这方面帮助我将是伟大的,因为这是我们工作的最后一项任务。真的,谢谢大家。
答案 0 :(得分:2)
我们使用PrimeOCR产品来执行此操作。它不是免费的,但我们找不到可比较的免费程序。
答案 1 :(得分:1)
因此,困难的部分是检测页面的角度。
如果您完全控制模板,最简单的方法可能是提供一个易于检测的符号(例如纯黑色圆圈),并在模板上粘贴3个符号。然后,检测它们(只需查看具有高饱和度的大块像素,如果是纯黑色圆圈)。
那么,你将拥有3组坐标。如果您有一个顶部圆圈,一个左圆圈和一个右圆圈,所有3个圆圈彼此之间的距离不同,则检测哪个圆圈是顶部圆圈应该非常简单。
然后只需调用旋转功能。这部分很容易,之前已经完成(例如http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-rotate)。
编辑: 我建议使用一个圆圈,因为它更容易找到中心,但矩形也应该有效。
要更明确地了解如何实际定位矩形/圆形,请取每个a×一组像素的平均亮度值。如果该值大于b,则a×一组像素是矩形的一部分。 a和b是你想要自己提出的变数。
使用flood-fill(或更确切地说,Connected Component Labeling)将结果像素组合在一起。最终结果应该给你你的矩形。