根据深色中心线 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" 线将是分布在多个列中。
目标是根据比周围其他区域更暗的垂直中心线在 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" 线将是分布在多个列中。