图片缩放用到的主要函数是:cv2.resize, 它最简单的形式如下:
cv2.resize(img, (new_width, new_height))
其中,img为源图片,new_width, new_height 为缩放后的宽度和高度,函数返回缩放后的图片。具体用法如下面的例子。
示例1
import cv2
# 读取图片
img = cv2.imread("lenna.jpg")
# 显示图片
cv2.imshow("img-org", img)
cv2.imshow("400x200", cv2.resize(img, (400, 200)))
cv2.imshow("250x400", cv2.resize(img, (250, 400)))
# 按任意键退出图片显示
cv2.waitKey()
其中,先读取图片,然后分别显示:原图,缩放到400*200的图片和缩放的250*400的图片,程序显示结果如下图:
其中,左上角是原图,右上角是缩放到400*200的图片,右下角缩放的250*400的图片。这个还是挺简单的,不是吗 :-)
示例2
很多时候,我们需要在缩放图片的时候保持图片的长宽比,于是有了下面的例子。
import cv2
def scale_image(image, scale):
width = int(image.shape[1] * scale)
height = int(image.shape[0] * scale)
return cv2.resize(image, (width, height))
# 读取图片
img = cv2.imread("lenna.jpg")
# 显示图片
cv2.imshow("img-org", img)
cv2.imshow("img-scale-0.8", scale_image(img,0.8))
cv2.imshow("img-scale-2", scale_image(img,2))
# 按任意键退出图片显示
cv2.waitKey()
这里,定义了一个函数 scale_image , 其参数image为源图片,scale 代表缩放因子,可以取大于0的浮点数。(没有做入口参数的检查,不够鲁棒,你懂的!)
接下来的代码也是先读取图片,然后分别显示:原图,缩放0.8倍的图片和缩放2倍的图片,程序显示结果如下图
其中,左上角还是原图,左下角是缩放到0.8倍的图片,右边是缩放的2倍的图片。恩,还是保持长宽比的图片比较好看。
示例3
有时候,我们要把限制图片的长宽在一定范围内,比如长宽都不能超过300个像素,同时我们希望保持图片的长宽比,于是有了下面的例子。
import cv2
def scale_image(image, scale):
width = int(image.shape[1] * scale)
height = int(image.shape[0] * scale)
return cv2.resize(image, (width, height))
def shrink_image(image, max_size):
# 比较长度和宽度,取最大值
length = image.shape[0]
if length < image.shape[1]:
length = image.shape[1]
if length < max_size:
return image
else:
scale = max_size/(length*1.0)
return scale_image(image, scale)
# 读取图片
img_narrow = cv2.imread("narrow.jpg")
img_wide = cv2.imread("wide.jpg")
# 显示图片
cv2.imshow("n-org", img_narrow)
cv2.imshow("n-shrink",shrink_image(img_narrow,300))
cv2.imshow("w-org", img_wide)
cv2.imshow("w-shrink",shrink_image(img_wide,300))
# 按任意键退出图片显示
cv2.waitKey()
这里新定义了一个shrink_image 函数, 参数image是源图片, max_size是最大尺寸(同时限定宽度和高度)。
接下来的代码读取两张图片,一张宽图,一张窄图,然后分别显示:原图,已经缩小后的图片,它们的长和宽都不超过300个像素,程序显示结果如下图
其中,左上角是窄图片的原图,右上角是宽图片的原图,它们的下方分别是高度和宽度被限定到300像素以内的图片。