我有这个源图像:
我的目标是删除底线,同时保持字母/数字不变。在
这是我使用的代码:
import cv2
import numpy as np
img = cv2.imread('src.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,100,200,apertureSize = 5)
minLineLength = 0
maxLineGap = 19
lines = cv2.HoughLinesP(edges,1,np.pi/180,15,minLineLength,maxLineGap)
for x in range(0, len(lines)):
for x1,y1,x2,y2 in lines[x]:
cv2.line(img,(x1,y1),(x2,y2),(255,255,255),2)
cv2.imshow('hough',img)
cv2.waitKey(0)
到目前为止,我取得的最好成绩是:
我如何改进它,尽可能地清理图像? 例如,图像周围的所有碎片,单词下面的点和(仍然)线条,我如何才能移除它们?在
谢谢。在
OT:有没有一种方法可以创建一个跟踪栏来更改参数(apertureSize、minLineLength、maxLineGap等)来实时查看结果?在
根据@Link的要求:
我在python方面的经验有限,所以我不知道这段代码的线程安全性如何,但这应该向您展示在python OpenCV中创建轨迹条的基本知识。在
一旦你有了Hough的线段,你可以搜索它们,找到可能是底线一部分的线段(即正确的角度和截距),然后删除沿着这条预测线的所有黑点,而不仅仅是Hough找到的线段。在
另一个技巧是,尝试cv::adaptivethreshold而不是canny,并尝试先做一个小的高斯模糊来去除背景斑点。在
编辑:您正在使用HoughP,它可以单独查找每个留置权段。你要找的是一条(断开的)线,所以使用常规Hough可能会更好,从结果中选择图像下半部分最强的水平线-然后沿该方向删除所有点。在
ot:cv::namedWindow可以有一个trackbar,您可以在其中轻松地获取值
相关问题 更多 >
编程相关推荐