根据暗中心线使用python水平分割图像

时间:2019-01-30 15:25:29

标签: python opencv python-imaging-library opencv-python

目标是根据垂直中心线(比周围其他区域更暗)在python中水平分割图像(双报纸页面)。

示例图片:

enter image description here

使用opencv(cv2)进行初始裁剪并使用cv2.Canny从黑色背景旋转双页,然后根据cv2.contourArea对轮廓进行排序时,运气不错。 / p>

但是,现在我只想找到一条中心线,然后将图像分成两个单独的图像。再次使用cv2.Canny,我看到它可以识别该中心线,但是不确定如何识别该长的垂直线并将其用于分割图像:

enter image description here

最终目标将是两个图像,如下所示:

enter image description here enter image description here

任何建议都将受到欢迎。

1 个答案:

答案 0 :(得分:1)

首先,运行水平渐变,以便仅突出垂直边缘。您可以使用以下系数计算水平梯度:

-1   0   1
-2   0   2
-1   0   1

然后计算垂直列的总和,您可以使用np.sum(array,axis=0),您将获得以下信息:

enter image description here

为了便于查看,我对其进行了重新整形-实际上它只有1像素高。希望您可以在Numpy argmax()中看到中间的亮白线。当您只进行水平渐变时,效果也会更好,因为此刻我正在使用紫色和黄色图像,并增强了垂直和水平边缘。

请注意,这种方法的灵感在于您说“ “要识别出较长的垂直中心线” ,其理由是,一长行白色像素将加起来很大。请注意,我假设您的图像是歪斜的(因为您说这条线是垂直的),并且这种方法在“ vertical” 线会分布在几列的歪斜图像上可能效果不佳。