c++ - 如何使用 OpenCV 从表中检测行和列

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

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

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

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

为此,我需要知道:

  1. 单元格中是否有符号
  2. 找出哪些行和列,以便我可以正确地放入我的二维数组。 (有则为 1,无则为 0)

本人初学OpenCV,只知道检测边界是否存在(一些预处理,轮廓检测,搜索approxPolyDP)。我读过这篇文章How to remove convexity defects in a Sudoku square?但是,我仍然不知道我必须做什么..

最佳答案

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

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

  1. 计算每行的黑色像素和每列的黑色像素(或强度 > 0.5)
  2. 搜索至少包含一定数量黑色像素的每一行和每一列。因此,使用阈值 t1
  3. 考虑以下条件。两行(和两列)之间的距离应至少为 t2

此后,您应该有单行和单列。只剩下一个问题(如果它对您来说是个问题)。代表列的线不是连续的。因此,您可以通过测量列线的长度来检测表格之间的间隙。

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

关于c++ - 如何使用 OpenCV 从表中检测行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501092/

相关文章:

python - 导入cv2(Python)时出现非法指令(内核已转储)

c++ - 您如何解释缓存未命中的 cachegrind 输出?

c++ STL库这些带下划线的方法是什么?

c++ - 如果 vector 包含重复,则此函数应返回 true。知道为什么它不起作用吗?

python - 如何在Python中使用OpenCV将背景的阴影部分计为背景(如下图)?

ios - 从 iPhone 库中加载视频,修改帧并实时播放

c++ - 使用 Assimp 和 OpenGL 加载和绘制 .obj 模型时遇到问题

python - 通过计算机视觉进行稳健的手部检测

image-processing - 如何在 Assembly 中转置图像?

Matlab 将图形拟合为黑白图像