Python 代码自动识别矫正歪斜图片
Python 代码自动识别矫正歪斜图片
本代码使用 Python 和 OpenCV 库实现自动识别并矫正歪斜图片。
代码
import numpy as np
import cv2
import matplotlib.pyplot as plt
def deskew(img):
m = cv2.moments(img)
if abs(m['mu02']) < 1e-2:
return img.copy()
skew = m['mu11']/m['mu02']
M = np.float32([[1, skew, -0.5*28*skew], [0, 1, 0]])
img = cv2.warpAffine(img, M, (28, 28), flags=cv2.WARP_INVERSE_MAP | cv2.INTER_LINEAR)
return img
img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
img = 255 - img
img = cv2.resize(img, (28, 28), interpolation=cv2.INTER_CUBIC)
img = deskew(img)
plt.figure()
plt.imshow(img, cmap='gray')
plt.show()
说明
- 首先导入必要的库,包括
numpy、cv2和matplotlib.pyplot。 deskew函数用于矫正图片。该函数首先使用cv2.moments计算图片的矩,然后根据矩计算图片的倾斜角度。最后使用cv2.warpAffine函数进行矫正。- 加载图片并进行灰度化和尺寸调整。
- 使用
deskew函数矫正图片。 - 使用
matplotlib.pyplot展示矫正后的图片。
使用方法
- 将
test.jpg替换为你的图片文件名。 - 运行代码即可。
代码原理
该代码使用 OpenCV 库中的 moments 函数计算图片的矩。矩可以用来描述图片的形状和位置信息。mu11 和 mu02 是图片的中心矩,它们可以用来计算图片的倾斜角度。
warpAffine 函数可以根据提供的变换矩阵对图片进行仿射变换,实现图片的平移、旋转和缩放等操作。在本代码中,我们使用 warpAffine 函数将图片矫正到水平方向。
注意
该代码只适合矫正轻微歪斜的图片。对于严重歪斜的图片,可能需要使用其他方法进行矫正。
原文地址: https://www.cveoy.top/t/topic/lj6Z 著作权归作者所有。请勿转载和采集!