我尝试使用tesseract对每个轮廓进行ocr,但没有从中得到正确的文本。使用Extracting text OpenCV可以正确完成轮廓识别。 请提出建议。
答案 0 :(得分:0)
由于不良的图像预处理,您无法从OCR获得正确的文本。 尝试使用各种图像处理技术来缩小图像的可行范围。 正如您在python下询问的那样,如果您有彩色图像,
将其转换为黑白图像,以消除色噪。
img = cv2.imread('name_of_the_coloured_input_image',0)
使用opencv的模糊技术(平均,高斯模糊,中值模糊和双边滤波)对图像进行模糊处理,从而减少了图像中的各种噪点。 Please refer to this link and try out various techniques
然后使用阈值处理(简单,自适应或otsu阈值处理),该方法将删除所有小于特定阈值的像素。 Please refer to this link and try out various techniques
现在,获取轮廓,并尝试在轮廓上使用tesseract以获得更好的结果。
注意:请记住,要使tesseract正常工作,应将文本设置为黑色,白色背景。
答案 1 :(得分:0)
请检查以下功能,如果有什么遗漏,请告诉我。
#gray out the image
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray', gray)
cv2.waitKey(0)
#image blurring
blur = cv2.blur(gray,(1,1))
cv2.imshow('Blur', blur)
cv2.waitKey(0)
#threshold & invert
ret, thresh = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY_INV)
thresh_copy = thresh.copy()
cv2.imshow("Threshold", thresh_copy)
cv2.waitKey(0)
#Erosion
kernel1 = np.ones((1,1), np.uint8)
img_erosion = cv2.erode(thresh, kernel1, iterations=1)
cv2.imshow("Erosion", img_erosion.copy())
cv2.waitKey(0)
#applying dilation
kernel = np.ones((6,10), np.uint8)
img_dilation = cv2.dilate(img_erosion.copy(), kernel, iterations=1)
cv2.imshow("Dilation", img_dilation)
cv2.waitKey(0)
#find contours
im2, ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
return ctrs