如何使用OpenCV检测表中的行和列

时间:2013-10-21 17:35:09

标签: c++ opencv image-processing computer-vision detection

我有想法对表进行行和列检测,使用Likert量表检测。有关详细信息,请参阅此链接中的图像。 http://img.docstoccdn.com/thumb/orig/42750583.png

问题是:
我想在我的程序中将单元格内的值输入到二维数组中。如果有符号(任何类型),则值为1;如果有符号,则为0。

注意:
第一行和第一列应该是标题的位置,问题仍然是1,我可以稍后跳过该过程中的第一行和第一列。

要做到这一点,我需要知道:

  1. 单元格中是否有符号
  2. 找出哪些行和列,以便我可以正确放入我的2d数组。 (如果有,则为1,否则为0)
  3. 我是OpenCV的新手,我只知道如何检测边界的存在(一些预处理,轮廓检测和搜索aboutPolyDP)。我已经阅读了这篇文章How to remove convexity defects in a Sudoku square?但是,我仍然不知道我要做什么..

2 个答案:

答案 0 :(得分:1)

当输入图像与您的示例图像类似时,为方便起见,我不会使用Hough transform

在下文中,我提出了一种检测线条的简单方法。此方法仅在输入图像与示例图像类似时才有效,即线条与图像边界平行。

  1. 计算每行的黑色像素和每列的黑色像素(或强度> 0.5)
  2. 搜索包含至少一定数量黑色像素的每一行和每列。因此,请使用阈值t1
  3. 考虑以下条件。两行(和两列)之间的距离应至少为t2
  4. 此后,您应该拥有单行和单列。只剩下一个问题(如果这对你来说是一个问题)。表示列的行不连续。因此,您可以通过测量列线的长度来检测表格之间的间隙。

    当检测到细胞时,您可以测量每个细胞内的像素并确定正确的细胞。

答案 1 :(得分:0)

我想我在这里找到了一个很好的参考,http://blog.ayoungprogrammer.com/2013/03/tutorial-creating-multiple-choice.html

这是关于多项选择检测,我认为他的情况与我的情况差不多,他必须检测答案是否在A,B,C,D或E列中。