OpenCV Python - 影像縮放和旋轉



在本章中,我們將學習如何使用 OpenCV Python 縮放和旋轉影像。

影像縮放

可以使用 `cv2.resize()` 函式來放大或縮小影像。

resize() 函式使用方法如下:

resize(src, dsize, dst, fx, fy, interpolation)

一般來說,插值是估計已知資料點之間值的 process。

當圖形資料包含間隙,但在間隙的兩側或間隙內的幾個特定點上有可用資料時,插值允許我們估計間隙內的值。

在上面的 `resize()` 函式中,插值標誌決定了用於計算目標影像大小的插值型別。

插值型別

插值型別如下:

  • INTER_NEAREST - 最近鄰插值。

  • INTER_LINEAR - 雙線性插值(預設使用)

  • INTER_AREA - 使用像素面積關係進行重取樣。它是影像縮小的首選方法,但是當影像放大時,它類似於 INTER_NEAREST 方法。

  • INTER_CUBIC - 在 4x4 畫素鄰域上進行雙三次插值

  • INTER_LANCZOS4 - 在 8x8 畫素鄰域上進行 Lanczos 插值

建議縮小影像時使用 `cv2.INTER_AREA` 插值,放大影像時使用 `cv2.INTER_CUBIC`(較慢)和 `cv2.INTER_LINEAR` 插值。

示例

以下程式碼將 'messi.jpg' 影像的大小調整為其原始高度和寬度的一半。

import numpy as np
import cv2
img = cv2.imread('messi.JPG',1)
height, width = img.shape[:2]
res = cv2.resize(img,(int(width/2), int(height/2)), interpolation =
cv2.INTER_AREA)

cv2.imshow('image',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出

Resize an Image

旋轉影像

OpenCV 使用仿射變換函式進行影像平移和旋轉等操作。仿射變換是一種可以表示為矩陣乘法(線性變換)後跟向量加法(平移)形式的變換。

cv2 模組提供兩個函式 cv2.warpAffinecv2.warpPerspective,您可以使用它們進行各種變換。`cv2.warpAffine` 使用 2x3 變換矩陣,而 `cv2.warpPerspective` 使用 3x3 變換矩陣作為輸入。

為了找到旋轉的變換矩陣,OpenCV 提供了一個函式 cv2.getRotationMatrix2D,其使用方法如下:

getRotationMatrix2D(center, angle, scale)

然後,我們將 `warpAffine` 函式應用於 `getRotationMatrix2D()` 函式返回的矩陣,以獲得旋轉後的影像。

下面的程式將原始影像旋轉 90 度,而不改變尺寸:

示例

import numpy as np
import cv2
img = cv2.imread('OpenCV_Logo.png',1)
h, w = img.shape[:2]

center = (w / 2, h / 2)
mat = cv2.getRotationMatrix2D(center, 90, 1)
rotimg = cv2.warpAffine(img, mat, (h, w))
cv2.imshow('original',img)
cv2.imshow('rotated', rotimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出

原始影像

Original Image

旋轉後的影像

Rotated Image
廣告
© . All rights reserved.