Python检索JPEG图像上黑色矩形左上角的(x,y)坐标

时间:2014-08-07 03:08:24

标签: python image opencv image-processing optical-mark-recognition

背景:我正在尝试创建一个软件来自动标记答案文件。答题纸格式是固定的,如下所示:

enter image description here

问题:为了检测用户交叉的框(A,B,C?),我需要根据4个黑色矩形裁剪或进行透视变换。如何在上面的图像上检索四个黑色矩形的坐标,最好是OpenCV

附加信息:一旦我可以裁剪出如下所示的答案框:    enter image description here

由于我知道每个方框的确切尺寸,我可以比较每个方框(A,B,C)中的黑色像素数,以检查用户交叉的方框。(假设用户不跨越多个方框)< / p>

欢迎所有建设性意见。

1 个答案:

答案 0 :(得分:1)

从它的角度来看,你的黑色方块似乎是页面上唯一真正的黑色东西,其余的都显得更轻。此外,你“有点”知道它们在哪里,或者至少在一般领域:它们有自己的列,上面或下面没有别的东西。因此,假设您的图像是“8位灰度”,这就是我如何在没有任何形状识别模块的情况下实现它:

  • 过滤某个值(5?10?50?)下所有像素的图像,看看是否足以滤除除正方形以外的所有像素。

  • 然后将图像模式切换为黑白(无灰色,只有1位地图)并将其反转(黑色 - >白色,白色 - >黑色)

  • 然后我会从左到右扫描图像的列。对于每列,对所述列中的所有像素求和。只要结果为零,你就不存在了。当总和开始为非null时,您找到了一个正方形。非零值列中的索引对应于一个方块角(您甚至可以分辨哪个方块位于列的上部或下部)。如果继续扫描,总和会增加。通过查看总和,您应该能够推导出每个方角的位置,即:和变化中的每个变化都是一个新角。一大步:所有方块完美对齐。 4个小步骤:​​对角线上的正方形。几何上,除非纸张被撕裂或折叠,否则方块左角将立即显示,或按顺序显示(直到底部或底部向上)。从右到左重复。

对总和的分析当然是最棘手的部分,但快速查看2或3个例子可以粗略估计出可以用于其他例子,例如:600到800之间的总和 - &gt;该列中只有一个方块,总和在1200和1600之间 - >当然,必须有更多实用的模式识别解决方案,但那是作弊。