今天尝试了用 python+opencv 对图片进行纠斜,虽然有了一点点眉目,但是距离完美解决还非常远。
如果图片中文字只是小角度的左倾斜或者右倾斜,可以得到解决,但是在倾斜角度过大的情况下,好像无法基于角度得到一个合理的旋转方向,结果就可能不对。尝试了许久,也查了一些资料,但没有找到理想答案,以后弄清楚了再完善一下。
import cv2import numpy as npdef showImage(name, image):cv2.imshow(name, image)cv2.waitKey(0)cv2.destroyAllWindows()def imageskew(url):#读取图片img = cv2.imread(url)#显示原图showImage("之前", img)#转为灰度图grayimg=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#灰度图像取反grayimg=cv2.bitwise_not(grayimg)#像素值大于0的坐标集合coordinates = np.column_stack(np.where(grayimg > 0))#计算旋转角度ang =cv2.minAreaRect(coordinates)[-1]if ang < 45:ang=-angelse:ang=90-ang#计算中心坐标height, width = img.shape[:2]center = (width / 2, height / 2)#获得仿射变化矩阵rotationmatrix = cv2.getRotationMatrix2D(center, ang, 1.0)#进行仿射变化rotatedimg = cv2.warpAffine(img, rotationmatrix, (width, height), borderMode = cv2.BORDER_REFLECT)#展示纠斜后的图片showImage("之后", rotatedimg)#小角度左倾斜图片imageskew("skewl.png")#小角度右倾斜图片imageskew("skewr.png")
原图:


纠正后的结果图:

运行环境:Win10 + Python 3.9.6 + opencv_python==4.5.3.56
文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




