目錄
一、圖像仿射變換
1、基本性質
二、cv2.warpAffine() 函數
1、圖像旋轉
2、圖像平移
3、圖像縮放
4、圖像剪切
三、 插值方法
1、最近鄰插值
2、雙線性插值
3、像素區域插值?
4、雙三次插值?
5、Lanczos插值
一、圖像仿射變換
仿射變換(Affine Transformation)是一種線性變換,保持了點之間的相對距離不變
? ? ? ? 1、基本性質
????????????????保持直線
? ??????????????保持平行
????????????????比例不變性
????????????????不保持角度和長度
二、cv2.warpAffine() 函數
? ? ? cv2.warpAffine()
是 OpenCV 中用來對圖像進行仿射變換的函數。仿射變換是一種保? ? ? ? ? ? ? ?直線和比例的變換,可以包括平移、旋轉、縮放和傾斜等操作
#仿射變換函數
cv2.warpAffine(img,M,dsize)
參數:
img:輸入圖像
M:2x3的變換矩陣,類型為np.float32
dsize:輸出圖像的尺寸,形式為(width,height)
? ? ? ? 1、圖像旋轉
????????????????旋轉圖像可以將圖像繞著某個點旋轉一定的角度
????????????????cv2.getRotationMatrix2D()函數
cv2.getRotationMatrix2D(center,angle,scale)
參數:
center:旋轉中心點的坐標,格式為(x,y)
angle:旋轉角度,單位為度,正值表示逆時針旋轉、負值表示順時針旋轉
scale:縮放比例,若設為1,則不縮放
返回值(M):2x3的旋轉矩陣
? ? ? ? 2、圖像平移
?????????????????平移操作可以將圖像中的每個點沿著某個方向移動一定的距離?
? ? ? ? ?3、圖像縮放
????????????????縮放操作可以改變圖片的大小
? ? ? ? 4、圖像剪切
????????????????剪切操作可以改變圖形的形狀,以便其在某個方向上傾斜,它將對象的形狀改變為斜邊? ? ? ? ? ? 平行四邊形,而不改變其面積
?
三、 插值方法
插值(Interpolation)是一種通過已知數據點之間的推斷或估計來獲取新數據點的方法,在圖像處理中常用于處理圖像的放大、縮小、旋轉、變形等操作,以及處理圖像中的像素值
圖像插值算法是為了解決圖像縮放或者旋轉等操作時,由于像素之間的間隔不一致而導致的信息丟失和圖像質量下降的問題。當我們對圖像進行縮放或旋轉等操作時,需要在新的像素位置上計算出對應的像素值,而插值算法的作用就是根據已知的像素值來推測未知位置的像素值
方法 | 鄰域大小 | 平滑度 | 計算速度 | 適用場景 |
最近鄰 | 1 x 1 | 最差 | 最快 | 像素藝術、實時預覽 |
雙線性 | 2 x 2 | 中等 | 中等 | 通用縮放 |
雙三次 | 4 x 4 | 最佳 | 最慢 | 高質量放大/縮小 |
像素區域 | 動態區域 | 好 | 中等 | 縮小抗鋸齒 |
? ? ? ?
1、最近鄰插值
CV2.INTER_NEAREST
原理與步驟
????????距離計算:對于待插值的位置(如圖像中的非整數坐標點),計算它與所有已知數據點的距? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 離(通常用歐氏距離)。
????????最近點選擇:找到距離最近的那個已知數據點。
????????賦值:直接將該最近點的值賦給待插值位置。
(最近鄰插值適合對速度要求高、對質量要求低的場景)
? ? ? ? 2、雙線性插值
CV2.INTER_LINEAR
雙線性插值(Bilinear interpolation)是圖像縮放、旋轉、幾何校正中最常用的一種平滑插值方法。它通過兩次一維線性插值(先水平、后垂直)來計算目標點的值,避免了最近鄰插值的“鋸齒”問題
? ? ? ? 3、像素區域插值?
cv2.INTER_AREA
一種專為圖像縮小(下采樣)設計的插值方法。把目標圖像的一個像素,反向映射回原圖對應的一個“區域”,然后取該區域所有原像素的平均值作為結果
縮小圖像時,一個目標像素可能覆蓋原圖的多個像素(例如縮小 50% 時,1 個目標像素對應原圖 2×2=4 個像素)像素區域插值通過“區域平均”強制抗鋸齒,效果更自然
? ? ? ? 4、雙三次插值?
cv2.INTER_CUBIC
雙三次插值(Bicubic interpolation)是一種高階、平滑的二維插值方法,通過對目標點周圍 16 個(4×4)已知像素 進行三次多項式加權來得到插值結果。它是圖像處理中放大圖像時質量最好的算法之一
? ? ? ? 5、Lanczos插值
cv2.INTER_LANCZOS4
Lanczos插值方法與雙三次插值的思想是一樣的,不同的就是其需要的原圖像周圍的像素點的范圍變成了8*8,并且不再使用BiCubic函數來計算權重,而是換了一個公式計算權重