本篇笔记的运行环境为:windows下配置好opencv3.1.0和tensorflow1.2.1环境的python3.5.4编辑器pycharm。(ps:没用到tensorflow所以可以忽略)
1. 图片缩放
即改变图片的高度与宽度
1.加载 2.获取图片信息 3.调用resize方法改变大小 4.检查改变的结果
图片缩放的形式可以分为:放大,缩小
根据图片缩放的比例,可以分为等比例和非等比例
非等比例缩放:宽高比与原图片不一致
opencv中提供的四种常见图片缩放方法:
1.最近邻域插值 2.双线性插值 3.像素关系重采样 4.立方插值
默认情况下使用双线性插值。
# 1 load 2.info 3.resize 4.check
import cv2 #导入opencv
img = cv2.imread("image0.jpg",1) #imread方法参数:图片的名称 1表示获取彩色图片
#cv2.imshow('image0',img)
imginfo = img.shape #图片的宽度,高度以及图片的颜色组成方式,返回值是一个元组
#print(imginfo)
height = imginfo[0] #获取当前图片的高度
width = imginfo[1] #获取当前图片的宽度
mode = imginfo[2] #图片的颜色组成方式
# 1 放大 缩小 2 等比例,非等比例 2:3
dstHeight = int(height*0.5) #目标的高度信息,并转化成int类型
dstWidth = int(width*0.5) #目标的宽度信息,并转化成int类型
# 最近邻域插值 双线性插值 像素关系重采样 立方插值
dst = cv2.resize(img,(dstWidth,dstHeight)) #定义最终生成的图片
# resize方法参数:原始图片的名称,最终我们要生成的图片的宽度,高度信息
cv2.imshow('image',dst) #imshow参数:显示窗口的名称 将要打开的图片名称
cv2.waitKey(0)
最近邻域插值法和双线性插值法的原理和实现
最近邻域插值法:
原图像大小为1020,目标图像的大小为510
原图像上的(2,4)->目标图像上的(1,2)
dst x 1 ->src x 2 newX
newX = x*(src 行/目标 行)newX=1*(10/5)=2
newY = y*(src 列/目标 列) newY = 2*(20/10)=4
若计算结果不是整数,那么取最靠近的那个整数为结果 12.3->12
双线性插值法:
操作流程:先将目标点在水平方向上投影:黄线与蓝线交于两点A1,A2;
然后将目标点在竖直方向上投影:绿线与蓝线相较于两点B1,B2;