使用Python和OpenCV進行文字偏斜校正

2021-10-22 09:43:14 字數 2505 閱讀 7557

這篇部落格將介紹如何使用python和opencv進行文字偏斜校正。給定影象包含未知角度的旋轉文字塊,需要通過以下方法糾正文字傾斜:

該演算法本身非常簡單,僅依賴於基本的影象處理技術,例如閾值處理,計算旋轉矩形的最小面積,然後應用仿射變換來校正偏斜。

通常會在自動文件分析中使用這種文字偏斜校正演算法,目標是將一組文件數位化,校正文字偏斜,然後應用ocr將影象中的文字轉換為機器編碼的文字。但是該演算法也可以應用於其他領域。

順時針旋轉——效果圖一如下:

逆時針旋轉——效果圖二如下:

# 匯入必要的包

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: degrees"

.format

(angle),(

10,30)

, cv2.font_hershey_******x,

0.7,(0

,0,255),

2)# 展示輸出影象

print

("[info] angle: "

.format

(angle)

)cv2.imshow(

"input"

, image)

cv2.imshow(

"rotated"

, rotated)

cv2.waitkey(

0)

使用Python和OpenCV檢測和標記湖面輪廓

我和小冬瓜 2018 08 04 17 00 opencv是乙個跨平台的計算機視覺庫,廣泛的被應用於物體識別,機器視覺和影象處理等領域。這篇文章裡我們將使用opencv探測地圖中湖面的輪廓,並標記面積最大的湖面。下面示例中來至於goolge地圖截圖。我們需要做的第一件事情就是在我們的python環境...

使用Python和OpenCV實現SIFT與ORB

目錄如下 目錄orb pratice.py 相關理論 import cv2 import numpy as np 該程式使用dataset中的1.jpg和2.jpg,使用sift對這2張進行特徵檢測和特徵提取,使用暴力匹配法對這2張進行特徵匹配,最後計算匹配程度較高的特徵點的單應性矩陣 讀取 建立s...

Python安裝OpenCV 基本使用

第一步 安裝numpy 第二步 安裝opencv contrib python 設定捕獲視窗大小 ret cap.set 4,240 while cap.isopened ret,frame cap.read gray cv2.cvtcolor frame,cv2.color bgr2gray 彩色...