【发布时间】:2021-08-08 09:55:03
【问题描述】:
我正在尝试对 OCR 的轮廓进行排序以检测它们,问题是我试图从左到右和从上到下对轮廓进行排序,但这无济于事。我在两行上有文本,我希望第一行中的轮廓从左到右排序,然后第二行相同。尝试了几种方法来解决这个问题,但我一直失败。下面是一个代码 sn-p,它显示了我尝试实现的内容
def get_precedence(contour, cols):
tolerance_factor = 10
origin = cv2.boundingRect(contour)
return ((origin[1] // tolerance_factor) * tolerance_factor) * cols + origin[0]
image = cv2.imread(file)
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(blurred, 30, 150)
cnts, h= cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts.sort(key=lambda x:get_precedence(x, edged.shape[1]))
【问题讨论】:
-
查看this 的帖子。
-
虽然这确实解决了排序的问题,但是链接中的代码排序并在图像上绘制轮廓线。我需要能够像使用这些行一样存储这些轮廓: cnts = cv2.findContours(edged.copy(),v2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours(cnts) 然后我希望能够迭代它们以输入我训练过的 OCR 模型。
-
首先使用水平形态学开放核连接字母来分离单词。然后遍历单词并分离字母。
标签: python opencv contour opencv-contour