学习资源:《机器学习实践指南 案例应用解析 第2版》
resize函数
通过OpenCV的resize函数可实现插值与缩放。
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR );
参数说明:
- src 输入,原图像
- dst 输出,目标图像
- dsize 输出图像的大小,如果这个参数不为0,表示把原图像缩放到Size(width, height)指定的大小;如果为0 , 原图像缩放之后的大小要通过下面公式计算:
dsize = Size(round(fx*src.cols),round(fy*src.rows))
- fx width方向的缩放比例,如果为0,就是按照(double)dsize.width/src.cols来计算
- fy height方向的缩放比例,如果为0,会按(double)dsize.height/src.rows来计算
- interpolation 插值的方式,有:
- INTERNEAREST 最邻近插值
- INTER_LINEAR 双线性插值
- INTER_AREA 像素关系重采样
- INTER_CUBIC 4*4像素领域内的双立方插值
- INTER_LANCZOS4 8*8像素邻域内的Lanczos插值
使用注意事项
- dsize和fx/fy不能同时为0
- 正常情况使用默认的双线性插值就够用了
- 插值效率:最邻近插值>双线性插值>双立方插值>Lanczos插值,效率与效果成反比
示例代码
# -*- coding: utf-8 -*-
#10-16.py
import cv2
fn="test.jpg"
img = cv2.imread(fn)
w= img.shape[1]
h= img.shape[0]
# 双立方插值放大
newimg1 = cv2.resize(img, (w*2,h*2),interpolation = cv2.INTER_CUBIC)
# 缩小 像素关系重采样
newimg2 = cv2.resize(img,(300,200),interpolation=cv2.INTER_AREA)
cv2.imshow('source',img)
cv2.imshow('preview1',newimg1)
cv2.imshow('preview2',newimg2)
cv2.waitKey()
cv2.destroyAllWindows()
运行示例:
原图:
[外链图片转存中…(img-PdzWGbkh-1574725855894)]
放大
[外链图片转存中…(img-d4XtZJqh-1574725855895)]
缩小