python-opencv resize()的使用(讲解+批量改变图像大小示例)
cv2.resize()
定义:
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR );
或者也可以:
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) -> dst
src:原图像;
dst:改变大小的目标图像;
dsize:输出图像的大小。
fx:width方向的缩放比例;
fy:height方向的缩放比例;
interpolation:指定插值的方式,图像resize之后,像素要重新计算,靠这个参数来指定重新计算像素的方式,有以下几种:
INTER_NEAREST - 最邻近插值
INTER_LINEAR - 双线性插值,如果最后一个参数你不指定,默认使用这种方法
INTER_AREA -区域插值
INTER_CUBIC - 4x4像素邻域内的双立方插值
INTER_LANCZOS4 - 8x8像素邻域内的Lanczos插值
要注意:dsize和fx/fy不能同时为0,
要么
一、指定dsize的值,让fx和fy直接省略或置0,比如
resize(img, imgDst, (512,512));
如果fx是0,它按照(double)dsize.width/src.cols来计算;
如果fy是0,它按照(double)dsize.height/src.rows来计算;
要么,
二、dsize=None或置0,指定fx和fy的值,(dsize不可省略,会报错),比如
resize(img, (0,0), fx=0.5,fy=0.5);
此时,原图像resize后的大小为:
dsize = Size(round(fxsrc.cols), round(fysrc.rows))
来自中文文档的例子:
import cv2 as cv
img = cv.imread('test.jpg')
# 打印出图片尺寸print(img.shape)# 将图片高和宽分别赋值给x,y
x, y = img.shape[0:2]
# 显示原图
cv.imshow('OriginalPicture', img)
# 缩放到原来的二分之一,输出尺寸格式为(宽,高)
img_test1 = cv.resize(img, (int(y / 2), int(x / 2)))
cv.imshow('resize0', img_test1)
cv.waitKey()
# 最近邻插值法缩放# 缩放到原来的四分之一
img_test2 = cv.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv.INTER_NEAREST)
cv.imshow('resize1', img_test2)
cv.waitKey()
cv.destroyAllWindows()
又要注意了:
img = cv2.imread(‘test.jpg’)
图像的size=(h,w)
resize的操作是先w,再h文章来源:https://www.toymoban.com/news/detail-626111.html
另一个例子:文章来源地址https://www.toymoban.com/news/detail-626111.html
im = cv2.resize(im, self.resize_h_w[::-1], interpolation=cv2.INTER_LINEAR)
#self.resize_h_w[::-1]这里应该是将h和w数组的值反过来。这里采用的线性插值。
批量缩放图片大小:
import os
import cv2
def resize_img(DATADIR, data_k, img_size):
w = img_size[0]
h = img_size[1]
path = os.path.join(DATADIR, data_k)
# 返回path路径下所有文件的名字,以及文件夹的名字,
img_list = os.listdir(path)#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
for i in img_list:
if i.endswith('.jpg'):#判断图片名称是否以".jpg"结尾
# 调用cv2.imread读入图片,读入格式为IMREAD_COLOR
img_array = cv2.imread((path + '/' + i), cv2.IMREAD_COLOR)
# 调用cv2.resize函数resize图片
new_array = cv2.resize(img_array, (w, h), interpolation=cv2.INTER_CUBIC)
img_name = str(i)
'''生成图片存储的目标路径'''
save_path = path + 'CLPD_1200_new/'
if os.path.exists(save_path):
print(i)
'''调用cv.2的imwrite函数保存图片'''
save_img = save_path + img_name
cv2.imwrite(save_img, new_array)
else:
os.mkdir(save_path)
save_img = save_path + img_name
cv2.imwrite(save_img, new_array)
if __name__ == '__main__':
# 设置图片路径
DATADIR = "C:/Users/User/Desktop/"
data_k = 'CLPD_1200'
'''设置目标像素大小,此处设为512 * 512'''
img_size = [512, 512]
resize_img(DATADIR, data_k, img_size)
到了这里,关于python-opencv resize() (讲解+批量改变图像大小示例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!