沧海一幻觉
您需要做一些预处理来隔离文本字符。一个简单的方法是使用 Otsu 的阈值来获得二值图像,然后我们可以找到轮廓并使用纵横比 + 轮廓区域进行过滤。这将为我们提供文本的边界框坐标,我们可以将其绘制到蒙版上。我们按位和输入图像的掩码得到我们的清洁图像,然后将其放入 OCR。结果如下:检测到的文本字符结果OCR 的结果AA RP代码import cv2import pytesseractimport numpy as nppytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"# Load image, grayscale, Otsu's thresholdimage = cv2.imread('1.jpg')original = image.copy()mask = np.zeros(image.shape, dtype=np.uint8) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]# Find contours and filter using aspect ratio and areacnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)cnts = cnts[0] if len(cnts) == 2 else cnts[1]for c in cnts: area = cv2.contourArea(c) x,y,w,h = cv2.boundingRect(c) ar = w / float(h) if area > 1000 and ar > .85 and ar < 1.2: cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2) cv2.rectangle(mask, (x, y), (x + w, y + h), (255,255,255), -1) ROI = original[y:y+h, x:x+w]# Bitwise-and to isolate characters result = cv2.bitwise_and(original, mask)result[mask==0] = 255# OCRdata = pytesseract.image_to_string(result,,config='--psm 6')print(data)cv2.imshow('image', image)cv2.imshow('thresh', thresh)cv2.imshow('result', result)cv2.waitKey()