目标是根据垂直中心线(比周围其他区域更暗)在python中水平分割图像(双报纸页面)。
示例图片:
使用opencv(cv2
)进行初始裁剪并使用cv2.Canny
从黑色背景旋转双页,然后根据cv2.contourArea
对轮廓进行排序时,运气不错。 / p>
但是,现在我只想找到一条中心线,然后将图像分成两个单独的图像。再次使用cv2.Canny
,我看到它可以识别该中心线,但是不确定如何识别该长的垂直线并将其用于分割图像:
最终目标将是两个图像,如下所示:
任何建议都将受到欢迎。
答案 0 :(得分:1)
首先,运行水平渐变,以便仅突出垂直边缘。您可以使用以下系数计算水平梯度:
-1 0 1
-2 0 2
-1 0 1
然后计算垂直列的总和,您可以使用np.sum(array,axis=0)
,您将获得以下信息:
为了便于查看,我对其进行了重新整形-实际上它只有1像素高。希望您可以在Numpy argmax()
中看到中间的亮白线。当您只进行水平渐变时,效果也会更好,因为此刻我正在使用紫色和黄色图像,并增强了垂直和水平边缘。
请注意,这种方法的灵感在于您说“ “要识别出较长的垂直中心线” ,其理由是,一长行白色像素将加起来很大。请注意,我假设您的图像是歪斜的(因为您说这条线是垂直的),并且这种方法在“ vertical” 线会分布在几列的歪斜图像上可能效果不佳。