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