opencv python 文字倾斜摆正
时间: 2023-08-27 19:05:11 浏览: 57
要将倾斜的文字摆正,需要进行以下步骤:
1. 读取图像并将其转换为灰度图像。
2. 进行二值化处理,将文字变为黑色,背景变为白色。
3. 执行形态学操作,使文字变得更加连续。
4. 找到所有的直线并筛选出水平和垂直方向的直线。
5. 计算所有直线的角度,并找到与水平和垂直方向最接近的直线。
6. 旋转图像,使找到的直线与水平方向对齐。
7. 进行OCR文字识别。
以下是一个示例代码:
```
import cv2
import numpy as np
img = cv2.imread('skewed_text.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# 形态学操作
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
morph = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
# 找到所有直线
lines = cv2.HoughLinesP(morph, 1, np.pi/180, 100, minLineLength=100, maxLineGap=10)
# 筛选出水平和垂直方向的直线
h_lines = []
v_lines = []
for line in lines:
x1, y1, x2, y2 = line[0]
angle = np.arctan2(y2 - y1, x2 - x1) * 180 / np.pi
if angle < -45:
angle += 180
if abs(angle) < 15:
h_lines.append(line)
elif abs(angle - 90) < 15:
v_lines.append(line)
# 计算所有直线的角度,并找到与水平和垂直方向最接近的直线
h_angles = [np.arctan2(line[0][3] - line[0][1], line[0][2] - line[0][0]) for line in h_lines]
v_angles = [np.arctan2(line[0][3] - line[0][1], line[0][2] - line[0][0]) for line in v_lines]
h_angle = np.median(h_angles) * 180 / np.pi
v_angle = np.median(v_angles) * 180 / np.pi
if abs(h_angle) < abs(v_angle):
angle = h_angle
else:
angle = v_angle - 90
# 旋转图像
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), angle, 1)
rotated = cv2.warpAffine(img, M, (cols, rows), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
# OCR文字识别
cv2.imshow('rotated', rotated)
cv2.waitKey()
```
在这个示例代码中,我们首先读取了一张倾斜的文字图片,并将其转换为灰度图像。然后进行了二值化处理和形态学操作。接着,我们使用霍夫变换找到了所有直线,并筛选出水平和垂直方向的直线。计算所有直线的角度,并找到与水平和垂直方向最接近的直线。最后,旋转图像并进行OCR文字识别。