opencv细节补充

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°中心对称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值