日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

使用Python和OpenCV进行文本偏斜校正

發(fā)布時(shí)間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。