Python實(shí)現(xiàn)簡(jiǎn)單圖像縮放與旋轉(zhuǎn)
1. 圖像縮放
1.2. 使用命令
import cv2 # 縮放 def resize(img, k, inter): res = cv2.resize(img, None, fx=k, fy=k, interpolation=inter) return res
參數(shù)設(shè)定(interpolation):
0:最近鄰插值
1:雙線性插值
2:基于局部像素的重采樣
3:基于4*4像素鄰域的三次插值
4:基于8*8像素鄰域的Lanczos插值
img_row = cv2.imread(r'picture4.jpg') cv2.imshow('origin_picture', img_row) cv2.waitKey(0) inters = [cv2.INTER_NEAREST, cv2.INTER_LINEAR, cv2.INTER_AREA, cv2.INTER_CUBIC, cv2.INTER_LANCZOS4] for inter in inters: res1 = resize(img_row, 2, inter) cv2.imshow('res1', res1) cv2.waitKey(0) position = 'pic_resize' + '_' + str(inter) + '.jpg' cv2.imwrite(position, res1)
1.2. 原理介紹
幾種方法原理簡(jiǎn)介:
最近鄰插值:將目標(biāo)圖像中的點(diǎn)對(duì)應(yīng)原圖像中最近鄰整數(shù)坐標(biāo)點(diǎn)的像素值雙線性插值:f(x,y)為二元函數(shù),假設(shè)我們知道f(x0,y0), f(x1,y1),f(x0,y1), f(x1,y0)四個(gè)點(diǎn)的值。這四個(gè)點(diǎn)確定一個(gè)矩形,我們希望通過(guò)插值得到矩形內(nèi)任意點(diǎn)的函數(shù)值。于是我們?cè)趚方向上進(jìn)行兩次線性插值,y方向上一次線性插值。綜合后得到以下公式:
局部像素的重采樣:如果放大圖像的比例是整數(shù)倍,與最近鄰插值類(lèi)似,如果放大的比例不是整數(shù)倍,則會(huì)采用線性插值三次插值:給定n+1個(gè)點(diǎn),a=x0<x1 < . . . <xn=b,以及他們的函數(shù)值f (x i) , i = 0 , 1 , 2 , . . . n ,在每個(gè)區(qū)間 [ x i , x i + 1 ]上,確定一個(gè)三次多項(xiàng)式,每個(gè)三次多項(xiàng)式滿足共4n-2個(gè)條件,剩余條件由邊界條件確定:
Lanczos插值:
需要通過(guò)計(jì)算模板中的權(quán)重信息來(lái)計(jì)算x對(duì)應(yīng)的值。對(duì)于一維信息,假如我們輸入的點(diǎn)集為X,那么,Lanczos對(duì)應(yīng)有個(gè)窗口模板Window,窗口中每個(gè)位置的權(quán)重計(jì)算如下,通常a取2或者3.根據(jù)計(jì)算出來(lái)的權(quán)重,然后再根據(jù)x即可求出對(duì)應(yīng)的加權(quán)平均:
1.3. 方法比較
速度比較:
效果比較:
最近鄰插值:最簡(jiǎn)單,但是邊緣沒(méi)有緩慢的過(guò)渡區(qū)域,導(dǎo)致放大圖像邊緣容易出現(xiàn)鋸齒雙線性插值:計(jì)算較最近鄰復(fù)雜,但是能很好避免邊緣鋸齒的現(xiàn)象區(qū)域重采樣:圖像放大時(shí)效果類(lèi)似于雙線性插值三次插值法:計(jì)算較為復(fù)雜,但是具有良好的穩(wěn)定性和平滑性Lanczos插值:計(jì)算最為復(fù)雜,效果最好,但是耗時(shí)最長(zhǎng)1.4. 實(shí)驗(yàn)結(jié)果
最近鄰:
雙線性:
基于局部像素的重采樣:
三次插值法:
Lanczos插值法:
2. 旋轉(zhuǎn)
2.1. 使用命令
import imutils # 旋轉(zhuǎn) def rotate(img, angle): res = imutils.rotate_bound(img, angle) return res img_row = cv2.imread(r'picture4.jpg') res2 = rotate(img_row, 45) cv2.imshow('res2', res2) cv2.waitKey(0) cv2.imwrite(r'pic_rotate.jpg', res2)
2.2. 實(shí)驗(yàn)效果
總結(jié)
到此這篇關(guān)于Python實(shí)現(xiàn)簡(jiǎn)單圖像縮放與旋轉(zhuǎn)的文章就介紹到這了,更多相關(guān)Python圖像縮放與旋轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Django的JsonResponse返回?cái)?shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了使用Django的JsonResponse返回?cái)?shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python控制結(jié)構(gòu)的條件判斷與循環(huán)示例詳解
這篇文章主要為大家介紹了python控制結(jié)構(gòu)的條件判斷與循環(huán)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Django3.2 自動(dòng)發(fā)現(xiàn)所有路由代碼詳解
這篇文章主要為大家介紹了Django自動(dòng)發(fā)現(xiàn)所有路由的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12Django中使用celery完成異步任務(wù)的示例代碼
本篇文章主要介紹了Django中使用celery完成異步任務(wù)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Python發(fā)送郵件實(shí)現(xiàn)基礎(chǔ)解析
這篇文章主要介紹了Python發(fā)送郵件實(shí)現(xiàn)基礎(chǔ)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Pytorch中torch.unsqueeze()與torch.squeeze()函數(shù)詳細(xì)解析
torch.squeeze()這個(gè)函數(shù)主要對(duì)數(shù)據(jù)的維度進(jìn)行壓縮,去掉維數(shù)為1的的維度,下面這篇文章主要給大家介紹了關(guān)于Pytorch中torch.unsqueeze()與torch.squeeze()函數(shù)詳細(xì)的相關(guān)資料,需要的朋友可以參考下2023-02-02