這篇部落格將介紹如何使用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)# 展示輸出影象
("[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 彩色...