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 | 
系列文章:
- opencv常用边缘检测算子示例
 - 图像颜色空间对比(Opencv)
 - 图像变换方式区别对比(Opencv)
 - 常用图像滤波及色彩调节操作(Opencv)
 - 图像形态学操作对比(Opencv)
 


















