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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv获取模板旋转角度_OpenCV入门之获取图像的旋转角度

發(fā)布時間:2025/3/8 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv获取模板旋转角度_OpenCV入门之获取图像的旋转角度 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在我們的日常生活中,所碰到的圖像往往都有一定的傾斜。那么,如何用OpenCV來獲取圖像的旋轉(zhuǎn)角度呢? ??我們以下面的圖片為例,簡單介紹如何用OpenCV來獲取圖像的旋轉(zhuǎn)角度。

可以看到,該圖像存在著許多噪聲,且是彩色圖片,因此,需要對圖像做預(yù)處理。

預(yù)處理

圖像的預(yù)處理包括去除邊緣,去除噪聲(兩條灰色線),濾波,二值化等,具體處理的Python代碼如下:

# -*- coding: utf-8 -*-

import cv2

imagepath = 'F://CHN_Char/4.png'

img = cv2.imread(imagepath, 1)

# 將圖片的邊緣變?yōu)榘咨?/p>

height, width = img.shape[0:2]

for i in range(width):

img[0, i] = [255]*3

img[height-1, i] = [255]*3

for j in range(height):

img[j, 0] = [255]*3

img[j, width-1] = [255]*3

# 去掉灰色線(即噪聲)

for i in range(height):

for j in range(width):

if list(img[i,j]) == [204,213,204]:

img[i,j]=[255]*3

# 把圖片轉(zhuǎn)換為灰度模式

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 中值濾波

blur = cv2.medianBlur(gray, 3) # 模板大小3*3

# 二值化

ret,thresh = cv2.threshold(blur, 200, 255, cv2.THRESH_BINARY)

# 保存圖片

cv2.imwrite('F://CHN_Char/char_after_bin.png', thresh)

預(yù)處理后的圖片如下:

可以看到,預(yù)處理后的圖像基本不含噪聲,且是黑色圖片,這樣,我們就可以進(jìn)行后續(xù)操作了。

獲取旋轉(zhuǎn)角度

對于上述預(yù)處理后的圖片,可以用OpenCV的最小外接矩形方法(minAreaRect())來操作,該方法會返回最小外界矩形的中心點左邊,矩形寬度、高度,以及旋轉(zhuǎn)角度。因為圖像中只有一個文字,因此包含該文字的最小外接矩形返回的角度就是圖像的旋轉(zhuǎn)角度(當(dāng)然也有可能是負(fù)值)。 ??完整的Python代碼如下:

# -*- coding: utf-8 -*-

import cv2

import numpy as np

imagepath = 'F://CHN_Char/char_after_bin.png'

img = cv2.imread(imagepath, -1)

image, contours, _ = cv2.findContours(img, 2, 2)

for cnt in contours:

# 最小外界矩形的寬度和高度

width, height = cv2.minAreaRect(cnt)[1]

if width* height > 100:

# 最小的外接矩形

rect = cv2.minAreaRect(cnt)

box = cv2.boxPoints(rect) # 獲取最小外接矩形的4個頂點

box = np.int0(box)

if 0 not in box.ravel():

'''繪制最小外界矩形

for i in range(4):

cv2.line(image, tuple(box[i]), tuple(box[(i+1)%4]), 0) # 5

'''

# 旋轉(zhuǎn)角度

theta = cv2.minAreaRect(cnt)[2]

if abs(theta) <= 45:

print('圖片的旋轉(zhuǎn)角度為%s.'%theta)

angle = theta

# 仿射變換,對圖片旋轉(zhuǎn)angle角度

h, w = img.shape

center = (w//2, h//2)

M = cv2.getRotationMatrix2D(center, angle, 1.0)

rotated = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)

# 保存旋轉(zhuǎn)后的圖片

cv2.imwrite('F://CHN_Char/after_rotated.png', rotated)

輸出結(jié)果如下:

圖片的旋轉(zhuǎn)角度為-23.629377365112305.

得到的圖像如下:

在上述Python代碼中,先是利用minAreaRect()獲取圖像中的最小外接矩形,加上一定的篩選條件(如矩形的面積大于100,旋轉(zhuǎn)角度小于45度等)就能得到包含文字的最小外界矩形,其旋轉(zhuǎn)角度就是整個圖像的旋轉(zhuǎn)角度。

識別圖像中的文字

有了旋轉(zhuǎn)后的圖像,我們不妨利用Tesseract-OCR軟件來識別圖像中的文字,完整的Python代碼如下:

import pytesseract

import cv2

# tesseract.exe所在的文件路徑

pytesseract.pytesseract.tesseract_cmd = 'C://Program Files (x86)/Tesseract-OCR/tesseract.exe'

imagepath = 'F://CHN_Char/after_rotated.png'

image = cv2.imread(imagepath, -1)

text = pytesseract.image_to_string(image, lang='chi_sim', config='-psm 10')

print("Tesseract-OCR的識別結(jié)果為: '%s'."%text)

輸出結(jié)果為:

Tesseract-OCR的識別結(jié)果為: '知'.

因此,我們得到的圖像的旋轉(zhuǎn)角度是正確的。當(dāng)然,借用以上方法,還可以識別以下圖片中的文字:

總結(jié)

本次獲取圖像的旋轉(zhuǎn)角度是利用了圖像中只有一個文字,而包含該文字的最小外接矩形的旋轉(zhuǎn)角度就是圖像的旋轉(zhuǎn)角度。這只是獲取圖像旋轉(zhuǎn)角度的一種方式,當(dāng)然,還會有其他獲取圖像旋轉(zhuǎn)角度的方法,后續(xù)還會繼續(xù)介紹,歡迎大家交流~~

注意:本人現(xiàn)已開通微信公眾號: 輕松學(xué)會Python爬蟲(微信號為:easy_web_scrape), 歡迎大家關(guān)注哦~~

總結(jié)

以上是生活随笔為你收集整理的opencv获取模板旋转角度_OpenCV入门之获取图像的旋转角度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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