【图像处理】——改变图像的大小(降采样&重采样)
转载自:https://jingyan.baidu.com/article/a3a3f81139be1f8da2eb8ade.html
目录
我们常常需要将图片变成一样大小的图片,这样利于整理和批量操作,这时候就需要使用到调整图像的大小了
这里需要使用到的是重采样和降采样,重采样用在拉伸图像上,增加的像素点的像素值是通过插值法来得到的,最常用的方法就是将接近的像素点的值复制过去;降采样就是缩小图片时按照一定的距离进行选取像素点
先看看图片的大小:
import cv2
image=cv2.imread('C:/……/a.jpg')
a = image.shape
print(a)
其中,a[0]=371表示图片高度,a[1]=500表示图片宽度,a[2]=3表示图片是3通道图片。
1、拉伸图片——重采样
改变图片大小为500像素高度和371像素的宽度:
p0=cv2.resize(image,(371,500),interpolation=cv2.INTER_CUBIC)
这样,图片比例被破坏了,感觉恐龙被上下拉长了。
2、缩小图片
缩放图片的大小,需要增加或删除某些像素。但是,增加的像素的像素值,不能凭空产生,需要根据临近像素值,近似地给出增加的像素的值。
1)三次插值法cv2.INTER_CUBIC
如果需要按比例缩放图片,可以这样:
p1=cv2.resize(image,(int(a[1]/1.5),int(a[0]/1.5)),
interpolation=cv2.INTER_CUBIC)
2)重采样插值法cv2.INTER_AREA
给增加的像素赋值,需要用插值的方法。而这种方法并不唯一。比如,上面介绍了三次插值法(cv2.INTER_CUBIC)和重采样插值法(cv2.INTER_AREA)。
p2=cv2.resize(image,(int(a[1]/1.5),int(a[0]/1.5)),
interpolation=cv2.INTER_AREA)
3)上面两种方法的差值
你可能觉得p1和p2是一样的,但不是:
cv2.imshow('a',p1-p2)
cv2.waitKey(0)