Python實現(xià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ù)設定(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. 原理介紹
幾種方法原理簡介:
最近鄰插值:將目標圖像中的點對應原圖像中最近鄰整數(shù)坐標點的像素值雙線性插值:f(x,y)為二元函數(shù),假設我們知道f(x0,y0), f(x1,y1),f(x0,y1), f(x1,y0)四個點的值。這四個點確定一個矩形,我們希望通過插值得到矩形內任意點的函數(shù)值。于是我們在x方向上進行兩次線性插值,y方向上一次線性插值。綜合后得到以下公式:
![]()
局部像素的重采樣:如果放大圖像的比例是整數(shù)倍,與最近鄰插值類似,如果放大的比例不是整數(shù)倍,則會采用線性插值三次插值:給定n+1個點,a=x0<x1 < . . . <xn=b,以及他們的函數(shù)值f (x i) , i = 0 , 1 , 2 , . . . n ,在每個區(qū)間 [ x i , x i + 1 ]上,確定一個三次多項式,每個三次多項式滿足共4n-2個條件,剩余條件由邊界條件確定:
![]()


Lanczos插值:
需要通過計算模板中的權重信息來計算x對應的值。對于一維信息,假如我們輸入的點集為X,那么,Lanczos對應有個窗口模板Window,窗口中每個位置的權重計算如下,通常a取2或者3.根據(jù)計算出來的權重,然后再根據(jù)x即可求出對應的加權平均:


1.3. 方法比較
速度比較:

效果比較:
最近鄰插值:最簡單,但是邊緣沒有緩慢的過渡區(qū)域,導致放大圖像邊緣容易出現(xiàn)鋸齒雙線性插值:計算較最近鄰復雜,但是能很好避免邊緣鋸齒的現(xiàn)象區(qū)域重采樣:圖像放大時效果類似于雙線性插值三次插值法:計算較為復雜,但是具有良好的穩(wěn)定性和平滑性Lanczos插值:計算最為復雜,效果最好,但是耗時最長1.4. 實驗結果
最近鄰:

雙線性:

基于局部像素的重采樣:

三次插值法:

Lanczos插值法:

2. 旋轉
2.1. 使用命令
import imutils
# 旋轉
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. 實驗效果

總結
到此這篇關于Python實現(xiàn)簡單圖像縮放與旋轉的文章就介紹到這了,更多相關Python圖像縮放與旋轉內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Django的JsonResponse返回數(shù)據(jù)的實現(xiàn)
這篇文章主要介紹了使用Django的JsonResponse返回數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01
Django3.2 自動發(fā)現(xiàn)所有路由代碼詳解
這篇文章主要為大家介紹了Django自動發(fā)現(xiàn)所有路由的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12
Pytorch中torch.unsqueeze()與torch.squeeze()函數(shù)詳細解析
torch.squeeze()這個函數(shù)主要對數(shù)據(jù)的維度進行壓縮,去掉維數(shù)為1的的維度,下面這篇文章主要給大家介紹了關于Pytorch中torch.unsqueeze()與torch.squeeze()函數(shù)詳細的相關資料,需要的朋友可以參考下2023-02-02

