1. 图像的大小变化:
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) -> dst
- src :需要改变尺寸的图像
- dsize:目标图像大小
- dst:目标图像
- fx:w方向上的缩放比例
- fy:h方向上的缩放比例
- interpolation - 插值方法。共有5种:
value 含义
cv2.INTER_NEAREST 最近邻插值法
插值后的边缘效果:由于是以最近的点作为新的插入点,因此边缘不会出现缓慢的渐慢过度区域,这也导致放大的图像容易出现锯齿的现象
cv2. INTER_LINEAR 双线性插值法(默认)放大时候用
可以有效避免出现锯齿的现象
cv2.INTER_AREA 基于局部像素的重采样,缩小的时候用
cv2.INTER_CUBIC 基于4x4像素邻域的3次插值法
cv2.INTER_LANCZOS4 基于8x8像素邻域的Lanczos插值
如果要缩小图像,通常推荐使用INTER_AREA插值效果最好,而要放大图像,通常使用INTER_CUBIC(速度较慢,但效果最好),或者使用INTER_LINEAR(速度较快,效果还可以)。
注意,dsize的形状是(w,h),而opencv读取出来的图像的形状是(h,w)
当参数dsize不为0时,dst的大小为dsize;否则,由src的大小以及缩放比例fx和fy来决定;可以看出dsize和(fx,fy)两者不能同时为0
因为dsize是没有默认值的,所以必须指定,也即我们使用fx和fy来控制大小的时候必须设置dsize=(0,0)
插值后的边缘效果:由于是以最近的点作为新的插入点,因此边缘不会出现缓慢的渐慢过度区域,这也导致放大的图像容易出现锯齿的现象
图像平移:
图像的几何变换主要包括:平移、旋转、缩放、剪切、仿射、透视等。
图像的几何变换主要分为:刚性变换、相似变换、仿射变换和透视变换(投影变换)、
平移代码
M = np.float32([[1,0,50],[0,1,50]])##x方向50,y方向50 h,w,c = img.shape dst = cv2.warpAffine(img,M,(w,h)) cv2.imshow('img',np.hstack([img,dst])) cv2.waitKey(0)
图像旋转:
M= cv2.getRotationMatrix2D((w/2,h/2),180,0.3) dst = cv2.warpAffine(img ,M,(w,h)) cv2.imshow('dst',np.hstack([img,dst])) cv2.waitKey(0)
# cv2.getRotationMatrix2D()##三个参数,旋转中心,旋转角度,旋转后的缩放因子
##图像的镜像:
dst = cv2.flip(img,-1) cv2.imshow('filp',np.hstack([img,dst])) cv2.waitKey(0)
flipCode = 0, 垂直翻转(沿X轴翻转); flipCode > 0, 水平翻转(沿Y轴翻转); flipCode < 0, 水平垂直翻转(180°中心对称