OpenCV resize()实现图片缩放(附带实例)
图像按比例缩放是指将给定的图像在 x 轴方向按比例缩放 fx 倍,在 y 轴方向按比例缩放 fy 倍,从而获得一幅新的图像:
在 OpenCV 中,实现图像缩放的函数是 resize(),该函数声明如下:
【实例】实现图像的缩放。
运行工程,结果如下图所示:
- 如果 fx=fy,即在 x 轴和 y 轴方向缩放的比例相同,则称这样的比例缩放为图像的全比例缩放;
- 如果 fx≠fy,图像的比例缩放则会改变原始图像的像素间的相对位置,产生几何畸变。
在 OpenCV 中,实现图像缩放的函数是 resize(),该函数声明如下:
resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) -> dst各个参数的含义如下:
- src 表示原图像;
- dst 表示输出图像;
- dsize 表示目标图像的大小;
- fx 表示在 x 轴上的缩放比例;
- fy 表示在 y 轴上的缩放比例;
-
interpolation 表示插值方式,包括:
- INTER_NN:最近邻插值;
- INTER_LINEAR:默认值,双线性插值;
- INTER_AREA:使用像素关系重采样,当图像缩小时,该方法可以避免波纹出现;当图像放大时,类似 INTER_NN 方法);
- INTER_CUBIC:立方插值。
注意,参数 dsize、fx 和 fy 不能同时为 0。
【实例】实现图像的缩放。
import numpy as np import cv2 def resizeImage(image,width=None,height=None,inter=cv2.INTER_AREA): newsize = (width,height) #获取图像尺寸 (h,w) = image.shape[:2] if width is None and height is None: return image #高度算缩放比例 if width is None: n = height/float(h) newsize = (int(n*w),height) else : n = width/float(w) newsize = (width,int(h*n)) # 缩放图像 newimage = cv2.resize(image, newsize, interpolation=inter) return newimage imageOriginal = cv2.imread("lakeWater.jpg") cv2.imshow("Original", imageOriginal) #获取图像尺寸 w = width=imageOriginal.shape[1] h = width=imageOriginal.shape[2] print ("Image size:",w,h) #放大2倍 newimage = resizeImage(imageOriginal,w*2,h*2,cv2.INTER_LINEAR) cv2.imshow("New", newimage) #保存缩放后的图像 cv2.imwrite('newimage.jpg',newimage) #缩小为原来的1/5 newimage2 = resizeImage(imageOriginal,int(w/5),int(h/5),cv2.INTER_LINEAR) cv2.imwrite('newimage2.jpg',newimage2)在上述代码中,首先显示了原图,然后利用 resize() 函数对图像分别进行放大 2 倍和缩小为原来的 1/5 的处理。
运行工程,结果如下图所示:
