检测OCR文本图像是否倒置。
检测OCR文本图像是否倒置。
我有几百张图像(扫描文档),其中大部分都有倾斜。我想使用Python对它们进行去倾斜处理。
下面是我使用的代码:
import numpy as np import cv2 from skimage.transform import radon filename = '文件路径' # 加载文件并转换为灰度图像 img = cv2.imread(filename) I = cv2.cvtColor(img, COLOR_BGR2GRAY) h, w = I.shape # 如果分辨率较高,将图像调整大小以减少处理时间 if (w > 640): I = cv2.resize(I, (640, int((h / w) * 640))) I = I - np.mean(I) # 去平均值,使亮度在零上下延伸 # 进行Radon变换 sinogram = radon(I) # 计算每行的RMS值,并找到“最繁忙”的旋转角度, # 即变换与交替的深色文本和白线完全对齐的角度 r = np.array([np.sqrt(np.mean(np.abs(line) ** 2)) for line in sinogram.transpose()]) rotation = np.argmax(r) print('旋转角度:{:.2f}度'.format(90 - rotation)) # 旋转并以原始分辨率保存 M = cv2.getRotationMatrix2D((w/2, h/2), 90 - rotation, 1) dst = cv2.warpAffine(img, M, (w, h)) cv2.imwrite('rotated.jpg', dst)
这段代码对大多数文档都能很好地工作,除了某些角度:(180和0)以及(90和270)经常被检测为相同的角度(即无法区分(180和0)和(90和270))。因此,我得到了很多颠倒的文档。
以下是一个示例:
[图片链接](https://i.stack.imgur.com/Eyf0N.jpg)
我得到的结果图像与输入图像相同。
是否有任何建议使用Opencv和Python来检测图像是否颠倒?
附注:我尝试使用EXIF数据来检查方向,但没有找到解决方案。
编辑:
可以使用Tesseract(Python中的pytesseract)来检测方向,但仅适用于图像包含大量字符的情况。
对于可能需要此功能的任何人:
import cv2 import pytesseract print(pytesseract.image_to_osd(cv2.imread(file_name)))
如果文档包含足够的字符,Tesseract可以检测到方向。然而,当图像只有少量线条时,Tesseract提供的方向角度通常是错误的。因此,这不能是一个百分之百的解决方案。