- OpenCV Python 教程
- OpenCV Python - 首頁
- OpenCV Python - 概述
- OpenCV Python - 環境配置
- OpenCV Python - 讀取影像
- OpenCV Python - 寫入影像
- OpenCV Python - 使用 Matplotlib
- OpenCV Python - 影像屬性
- OpenCV Python - 位運算
- OpenCV Python - 形狀和文字
- OpenCV Python - 滑鼠事件
- OpenCV Python - 新增軌跡條
- OpenCV Python - 縮放和旋轉
- OpenCV Python - 影像閾值
- OpenCV Python - 影像濾波
- OpenCV Python - 邊緣檢測
- OpenCV Python - 直方圖
- OpenCV Python - 顏色空間
- OpenCV Python - 影像變換
- OpenCV Python - 影像輪廓
- OpenCV Python - 模板匹配
- OpenCV Python - 影像金字塔
- OpenCV Python - 影像加法
- OpenCV Python - 影像融合
- OpenCV Python - 傅立葉變換
- OpenCV Python - 捕捉影片
- OpenCV Python - 播放影片
- OpenCV Python - 從影片中提取影像
- OpenCV Python - 從影像生成影片
- OpenCV Python - 人臉檢測
- OpenCV Python - 均值漂移/CamShift
- OpenCV Python - 特徵檢測
- OpenCV Python - 特徵匹配
- OpenCV Python - 數字識別
- OpenCV Python 資源
- OpenCV Python - 快速指南
- OpenCV Python - 資源
- OpenCV Python - 討論
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()
輸出
旋轉影像
OpenCV 使用仿射變換函式進行影像平移和旋轉等操作。仿射變換是一種可以表示為矩陣乘法(線性變換)後跟向量加法(平移)形式的變換。
cv2 模組提供兩個函式 cv2.warpAffine 和 cv2.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()
輸出
原始影像
旋轉後的影像