1. 變換示例
import cv2
import matplotlib.pyplot as plotimg = cv2.imread(url)
img_cut = img[100:200, 200:300]
img_rsize = cv2.resize(img, (50, 50))
(hight,width) = img.shape[:2]
rotate_matrix = cv2.getRotationMatrix2D((hight//2, width//2), 50, 1)
img_wa = cv2.warpAffine(img, rotate_matrix, (width, hight))
img_fp = cv2.flip(img, -1)plot.figure(figsize=(15,3));
plot.subplot(1,5,1)
plot.title('source image')
plot.imshow(img)
plot.subplot(1,5,2)
plot.title('cut')
plot.imshow(img_cut)
plot.subplot(1,5,3)
plot.title('resize')
plot.imshow(img_rsize)
plot.subplot(1,5,4)
plot.title('rotate affine')
plot.imshow(img_wa)
plot.subplot(1,5,5)
plot.title('flip')
plot.imshow(img_fp)plot.show()
2. 改變尺寸
resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)
- 返回:變形后圖像
- src:原始圖像
- dsize:目標尺寸(寬,高)
- fx:寬度方向縮放比例
- fy:高度方向縮放比例
- interpolation:插值方式,默認為線性插值
3. 旋轉變形
getRotationMatrix2D(center, angle, scale)
- 返回:變換矩陣
- center:旋轉中心坐標,是一個元組參數(col, row)
- angle:旋轉角度,旋轉方向,負號為逆時針,正號為順時針
- scale:旋轉后圖像相比原來的縮放比例,1為等比例縮放
cv2.warpAffine(img,M,(rows,cols),flags=cv2.INTER_,borderMode=cv2.BORDER_REFLECT,borderValue=(255,255,255))
- 返回:變換后的圖像
- src: 原始圖像。
- M: 仿射變換矩陣,平移或旋轉的2×3的變換矩陣
- dsize: 輸出圖像的大小。
- flags: 插值方式,默認線性插值
- borderMode: 邊界像素模式,Constant: 使用常數值(borderValue)填充超出邊界的區域,Replicate: 復制邊界像素,Reflect: 使用反射模式填充
- borderValue: 邊界填充值; 默認0
日常進行仿射變換時,在只設置前三個參數的情況下,如 cv2.warpAffine(img,M,(rows,cols))可以實現基本的仿射變換效果,但可以出現“黑邊”現象
4. 圖像翻轉
flip(src, code)
- 返回:翻轉后圖像
- src:原始圖像
- code:翻轉方向,0:上下翻轉, 1:左右翻轉,-1:上下左右同時翻轉
5. 圖像插值類型
參數 | 算法 | 數值 |
---|---|---|
INTER_NEAREST | 最鄰近插值 | 0 |
INTER_LINEAR | 雙線性插值 (默認) | 1 |
INTER_CUBIC | 4x4像素鄰域內的雙立方插值 | 2 |
INTER_AREA | 使用像素區域關系進行重采樣 | 3 |
INTER_LANCZOS4 | 8x8像素鄰域內的Lanczos插值 | 4 |