根据深色中心线 python 水平分割图像

Split image horizontally with python based on dark center line

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

示例图片:

幸运地使用 opencv (cv2) 使用 cv2.Canny 从黑色背景开始裁剪和旋转双页,然后根据 cv2.contourArea 对轮廓进行排序.

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

最终目标将是如下两张图片:

欢迎提出任何建议。

首先,运行 水平渐变,因此您只强调垂直边缘。您可以使用这些系数计算水平梯度:

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

然后计算垂直列的总和,你可以使用np.sum(array,axis=0),你会得到:

为了便于查看,我重新调整了它的形状 - 它实际上只有 1 像素高。希望你能看到中间的亮白线,你可以用 Numpy argmax() 找到它。当你只做水平渐变时也会更好,因为目前我使用的是紫色和黄色图像,垂直和水平边缘增强。

请注意,这种方法的灵感来自于你说你 "want to identify that long, vertical centerline" 并且基本原理是一长串白色像素加起来会很大.请注意,我假设你的图像是去偏斜的(因为你说线是垂直的)并且这种方法可能不适用于偏斜图像,其中 "vertical" 线将是分布在多个列中。