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()

说明

  1. 首先导入必要的库,包括 numpycv2matplotlib.pyplot
  2. deskew 函数用于矫正图片。该函数首先使用 cv2.moments 计算图片的矩,然后根据矩计算图片的倾斜角度。最后使用 cv2.warpAffine 函数进行矫正。
  3. 加载图片并进行灰度化和尺寸调整。
  4. 使用 deskew 函数矫正图片。
  5. 使用 matplotlib.pyplot 展示矫正后的图片。

使用方法

  1. test.jpg 替换为你的图片文件名。
  2. 运行代码即可。

代码原理

该代码使用 OpenCV 库中的 moments 函数计算图片的矩。矩可以用来描述图片的形状和位置信息。mu11mu02 是图片的中心矩,它们可以用来计算图片的倾斜角度。

warpAffine 函数可以根据提供的变换矩阵对图片进行仿射变换,实现图片的平移、旋转和缩放等操作。在本代码中,我们使用 warpAffine 函数将图片矫正到水平方向。

注意

该代码只适合矫正轻微歪斜的图片。对于严重歪斜的图片,可能需要使用其他方法进行矫正。

Python 代码自动识别矫正歪斜图片

原文地址: https://www.cveoy.top/t/topic/lj6Z 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录