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

另一个例子:

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)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐