我有一些图片,比如一个包。这个包,上面有一个标题,是文字。我一直在尝试找到一种方法来检测文本偏离的角度(例如 4 度、-4 度等),这样我就可以重新定位图像,使其不再倾斜。通过图像,我的意思是旋转图像,这样袋子就不再倾斜了。
我尝试过的几种方法是使用 OpenCV 和 pytesseract。他们都没有成功,因为它给出的角度既多变又非常不准确。
这是我的 openCV 代码:
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Bounding box of text
rect = cv2.minAreaRect(contours[0])
box = cv2.boxPoints(rect)
box = np.intp(box)
# the angle that it is off by
angle = rect[2]
print(angle)
if angle < -45:
angle = -(90 + angle)
else:
angle = -angle
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), angle, 1)
img_rotated = cv2.warpAffine(img, M, (cols, rows))
我也试过hough变换的方法,结果也差不多(也许我只是写错了?)
我的pytesseract尝试:
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
area = cv2.contourArea(cnt)
x, y, w, h = cv2.boundingRect(cnt)
if area > 1000 and h > 20 and w > 20:
roi = img[y:y+h, x:x+w]
break
text = pytesseract.image_to_string(roi, lang='fra', config='--psm 6')
orientation, _ = pytesseract.image_to_osd(roi, lang='fra')
angle = int(orientation.split('\n')[1].split(':')[-1])
谢谢,如果可以提供更多详细信息,请告诉我。