1. 变换示例
import cv2
import matplotlib.pyplot as plot
img = 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 |
系列文章: