使用cv2剪切图像中的特定片段

时间:2018-03-09 11:38:48

标签: python image opencv image-processing cv2

Sample image

我扫描了包含多个问题的页面副本。 现在我想分别削减个别问题。例如: individual question

我使用的逻辑是:1。查找轮廓

kernal = np.ones((2, 20), np.uint8)
img_dilation = cv2.dilate(self.img, kernal, iterations=1)
im2, contr, _ = \
        cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
sorted_ctrs = sorted(contr, key=lambda ctr: cv2.boundingRect(ctr)[0])
  • 现在我们知道问题编号是我们想要剪切图像的地方,所有数字都位于边缘之前。因此,在数字的x坐标小于特定边距的点处切割图像将是开始的好地方。

但问题是它并不总能得出这些问号的轮廓。

还有其他更有效和准确的方法可以将问题从整页中删除。

1 个答案:

答案 0 :(得分:0)

这是我尝试的最简单的第一种方法:

首先,您可以通过查找分隔它们的长垂直线的位置来轻松裁剪两列。

在每个列上:如果以对齐方式扫描文档,则可以查看一列的水平投影。我可以观察到每个问题的结尾与另一个问题的开始之间存在显着差距。

当你计算水平投影时,无论你得到多少个零,都表示问题的结束和下一个问题的开始。