page contents

Python+OpenCV实现旋转文本校正方式

假设我们有一幅图像,图像中的文本被旋转了一个未知的角度。为了对文字进行角度的校正,我们需要完成如下几个步骤: 1、检测出图中的文本范围 2、计算出文本被旋转的角度 3、将图像旋转特定...

假设我们有一幅图像,图像中的文本被旋转了一个未知的角度。为了对文字进行角度的校正,我们需要完成如下几个步骤:

1、检测出图中的文本范围

2、计算出文本被旋转的角度

3、将图像旋转特定的角度


第一步、读取图像,并做二值化处理

  1. #读取图像,做二值化处理
  2. img = cv.imread('img/imageTextR.png')
  3. gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
  4. cv.imshow('gray', gray)
  5. #像素取反,变成白字黑底
  6. # gray = cv.bitwise_not(gray)
  7. ret, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
  8. cv.imshow('thresh', thresh)


第二步、计算包含了被旋转文本的最小边框

  1. #计算包含了旋转文本的最小边框
  2. coords = np.column_stack(np.where(thresh > 0))
  3. print(coords)
  4. #该函数给出包含着整个文字区域矩形边框,这个边框的旋转角度和图中文本的旋转角度一致
  5. angle = cv.minAreaRect(coords)[-1]
  6. print(angle)

我们将这些坐标传给函数cv.minAreaRect,该函数将给出包含着整个文字区域的矩形边框,这个边框的旋转角度和图中文本的旋转角度一致。


第三步、调整角度

  1. #调整角度
  2. if angle < -45:
  3. angle = -(90+ angle)
  4. else:
  5. angle = -angle

在角度小于-45的情况下,在原来的角度上增加90度,角度大于-45度,直接对角度反转。


第四步、执行仿射变换

  1. #仿射变换
  2. h, w = img.shape[:2]
  3. center = (w//2, h//2)
  4. print(angle)
  5. M = cv.getRotationMatrix2D(center, angle, 1.0)
  6. rotated = cv.warpAffine(img, M, (w, h), flags=cv.INTER_CUBIC, borderMode=cv.BORDER_REPLICATE)
  7. cv.putText(rotated, 'Angle: {:.2f} degrees'.format(angle), (10, 30), cv.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
  8.  
  9. print('[INFO] angel :{:.3f}'.format(angle))
  10. cv.imshow('Input', img)
  11. cv.imshow('Rotated', rotated)


校正后效果:

  • 发表于 2020-01-10 09:46
  • 阅读 ( 536 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1312 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章