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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python 图片旋转角度_OpenCV获取图像的旋转角度

發(fā)布時(shí)間:2024/9/18 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 图片旋转角度_OpenCV获取图像的旋转角度 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在我們的日常生活中,所碰到的圖像往往都有一定的傾斜。那么,如何用OpenCV來(lái)獲取圖像的旋轉(zhuǎn)角度呢?

我們以下面的圖片為例,簡(jiǎn)單介紹如何用OpenCV來(lái)獲取圖像的旋轉(zhuǎn)角度。

4.png

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

預(yù)處理

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

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

importcv2

imagepath= 'F://CHN_Char/4.png'img= cv2.imread(imagepath, 1)#將圖片的邊緣變?yōu)榘咨?/p>

height, width = img.shape[0:2]for i inrange(width):

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

for j inrange(height):

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

#去掉灰色線(即噪聲)

for i inrange(height):for j inrange(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ù)處理后的圖片

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

獲取旋轉(zhuǎn)角度

對(duì)于上述預(yù)處理后的圖片,可以用OpenCV的最小外接矩形方法(minAreaRect())來(lái)操作,該方法會(huì)返回最小外界矩形的中心點(diǎn)左邊,矩形寬度、高度,以及旋轉(zhuǎn)角度。因?yàn)閳D像中只有一個(gè)文字,因此包含該文字的最小外接矩形返回的角度就是圖像的旋轉(zhuǎn)角度(當(dāng)然也有可能是負(fù)值)。

完整的Python代碼如下:

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

importcv2importnumpy as np

imagepath= 'F://CHN_Char/char_after_bin.png'img= cv2.imread(imagepath, -1)

image, contours, _= cv2.findContours(img, 2, 2)for cnt incontours:#最小外界矩形的寬度和高度

width, height = cv2.minAreaRect(cnt)[1]if width* height > 100:#最小的外接矩形

rect =cv2.minAreaRect(cnt)

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

box =np.int0(box)if 0 not inbox.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#仿射變換,對(duì)圖片旋轉(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.

得到的圖像如下:

旋轉(zhuǎn)后的圖像

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

識(shí)別圖像中的文字

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

importpytesseractimportcv2#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的識(shí)別結(jié)果為: '%s'."%text)

輸出結(jié)果為:

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

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

識(shí)別文字

總結(jié)

本次獲取圖像的旋轉(zhuǎn)角度是利用了圖像中只有一個(gè)文字,而包含該文字的最小外接矩形的旋轉(zhuǎn)角度就是圖像的旋轉(zhuǎn)角度。這只是獲取圖像旋轉(zhuǎn)角度的一種方式,當(dāng)然,還會(huì)有其他獲取圖像旋轉(zhuǎn)角度的方法.

總結(jié)

以上是生活随笔為你收集整理的python 图片旋转角度_OpenCV获取图像的旋转角度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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