使用Python和OpenCV进行文本偏斜校正
生活随笔
收集整理的這篇文章主要介紹了
使用Python和OpenCV进行文本偏斜校正
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Python和OpenCV進行文本偏斜校正)
- 1. 效果圖
- 2. 源碼
- 參考
這篇博客將介紹如何使用Python和OpenCV進行文本偏斜校正。給定圖像包含未知角度的旋轉文本塊,需要通過以下方法糾正文本傾斜:
- 檢測圖像中的文本塊;
- 計算旋轉文本的角度;
- 旋轉圖像以校正歪斜;
該算法本身非常簡單,僅依賴于基本的圖像處理技術,例如閾值處理,計算旋轉矩形的最小面積,然后應用仿射變換來校正偏斜。
通常會在自動文檔分析中使用這種文本偏斜校正算法,目標是將一組文檔數字化,校正文本偏斜,然后應用OCR將圖像中的文本轉換為機器編碼的文本。但是該算法也可以應用于其他領域。
1. 效果圖
順時針旋轉——效果圖一如下:
逆時針旋轉——效果圖二如下:
2. 源碼
# USAGE
# python correct_skew.py --image images/neg_4.png# 導入必要的包
import numpy as np
import argparse
import cv2# 構建命令行參數及解析
# --image 輸入圖像路徑
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,help="path to input image file")
args = vars(ap.parse_args())# 從磁盤加載照片
image = cv2.imread(args["image"])# 將圖像轉換為灰度并翻轉前景和背景以確保前景現在為“白色”,背景為“黑色”
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bitwise_not(gray)# 閾值化圖像,設置所有前景色位255,所有背景色位0
# 在應用計算機視覺和圖像處理操作時,通常將前景表示為淺色,而背景(我們不感興趣的圖像部分)則變暗。
thresh = cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]# 獲取所有像素的(x,y)坐標,并對大于0的像素計數,然后使用這些坐標計算旋轉邊界框
coords = np.column_stack(np.where(thresh > 0))
angle = cv2.minAreaRect(coords)[-1]# cv2.minAreaRect返回[-90,0]
# 隨著矩形順時針旋轉,角度值將朝零增加。當達到零時,角度將再次設置回-90度,然后過程繼續。
# 因此當角度<0時,需要+90度取反數
if angle > 45: #此倆行代碼有改動angle = 90 - angle #此倆行代碼有改動
# 否則,僅取角度的倒數
else:angle = -angle# 旋轉圖像以達到文本傾斜校正
# 計算圖像的中心(x,y)坐標。利用中心坐標和旋轉角度調用cv2.getRotationMatrix2D計算旋轉矩陣M,應用旋轉矩陣進行實際的變換
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(image, M, (w, h),flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)# 繪制校正角度在圖像上以驗證
cv2.putText(rotated, "Angle: {:.2f} degrees".format(angle),(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)# 展示輸出圖像
print("[INFO] angle: {:.3f}".format(angle))
cv2.imshow("Input", image)
cv2.imshow("Rotated", rotated)
cv2.waitKey(0)
參考
- https://www.pyimagesearch.com/2017/02/20/text-skew-correction-opencv-python/
總結
以上是生活随笔為你收集整理的使用Python和OpenCV进行文本偏斜校正的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows HTML本地快速渲染轨迹
- 下一篇: 使用OpenCV和Python计算图像的