暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python + opencv 对图片纠斜的一种方法

数据库杂货铺 2021-11-14
2215

今天尝试了用 python+opencv 对图片进行纠斜,虽然有了一点点眉目,但是距离完美解决还非常远。


如果图片中文字只是小角度的左倾斜或者右倾斜,可以得到解决,但是在倾斜角度过大的情况下,好像无法基于角度得到一个合理的旋转方向,结果就可能不对。尝试了许久,也查了一些资料,但没有找到理想答案,以后弄清楚了再完善一下。


import cv2
import numpy as np


def 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=-ang
else:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论