学习资源:《机器学习实践指南 案例应用解析 第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)]
缩小
图像基础9 插值与缩放_opencv