因此,我有一个图像,该图像的文字位置不合适,无法从中提取信息,因此我需要找到某种旋转方法。
我尝试了太多的库和理论,但是没有什么特别的 OpenCV。 我将加入一个需要旋转的图像示例。 非常感谢。
“ https://drive.google.com/open?id=1gzF1VLtb8Q7gOQ6u0IzrB98Ae1VC3TPF”
我尝试了例如:
import numpy as np
import cv2
image = cv2.imread("test1.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bitwise_not(gray)
thresh = cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
coords = np.column_stack(np.where(thresh > 0))
print coords
angle = cv2.minAreaRect(coords)[-1]
print angle
if angle < -45:
angle = -(90 + angle)
else:
angle = -angle
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(image, M, (w, h),flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
cv2.putText(rotated, "Angle: {:.2f} degrees".format(angle),(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
print("[INFO] angle: {:.3f}".format(angle))
我也尝试了这个理论: 以特定的方向扫描文档,并总结每条扫描线上“黑色”像素的数量(创建一维计数数组,每个索引代表Y坐标,即轮廓)。 计算计数(配置文件)的方差。 重复多个角度(可以通过二进制搜索的方式来减少处理) 导致最大差异的角度是正确的角度(由于文本行从打印的文本中产生了较大的峰值,而由于行之间缺少文本而导致了低谷) 然后,在找到该角度之后,您可以相应地调整图像并进行出色的OCR。 下面的代码:
from PIL import Image
from resizeimage import resizeimage
jpgfile = Image.open("test.jpg")
#size = jpgfile.size[0]/5 , jpgfile.size[1]/5
#cover = resizeimage.resize_cover(jpgfile, size)
#cover.show()
for i in range(0,360):
#a reviser
rotated = jpgfile.rotate(i)
rotated.save("out.jpg")
image = cv2.imread("out.jpg")
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
#cv2.imshow('binary',thresh)
#cv2.waitKey(0)
thresh_sum = thresh.sum(axis=1)
#thresh_sum.show
a = []
a = np.append(a,thresh_sum)
variance = 0
variance = np.var(thresh_sum,0)
print(variance,i)
rotated.show()