python 等比例缩放图片 自写

Python等比例缩放图片

使用了 OpenCV 进行图片的读取
输入:利用 cv2.imread 函数读取的 Mat 矩阵
输出:缩放后的 Mat 矩阵(示例代码为缩放到 512x512 大小,也可自行设定大小)

待处理图片分为两种类型:宽 > 高(Width > Height) 或 宽 < 高(Width < Height)

若是 宽 > 高:
那么缩放后多余出来的宽度,从中间截取 512 个像素。
若是 宽 < 高:
那么缩放后宽度不够,两侧填充黑色补齐到宽为 512 个像素。

示例代码:

def imgToSize(img):
    ''' imgToSize()
    # ----------------------------------------
    # Function:   将图像等比例缩放到 512x512 大小
    #             根据图像长宽不同分为两种缩放方式
    # Param img:  图像 Mat
    # Return img: 返回缩放后的图片
    # Example:    img = imgToSize(img)
    # ----------------------------------------
    '''
    # 测试点
    # cv2.imshow('metaImg.jpg', img)

    imgHeight, imgWidth = img.shape[:2]

    # cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
    # src 原图像,dsize 输出图像的大小,
    # img = cv2.resize(img, (512,512))
    zoomHeight = 512
    zoomWidth = int(imgWidth*512/imgHeight)
    img = cv2.resize(img, (zoomWidth,zoomHeight))

    # 测试点
    # cv2.imshow('resizeImg', img)

    # 如果图片属于 Width
    if imgWidth >= imgHeight:
        # 正常截取图像
        w1 = (zoomWidth-512)//2
        # 图像坐标为先 Height,后 Width
        img = img[0:512, w1:w1+512]
    else:
        # 如果宽度小于 512,那么对两侧边界填充为全黑色
        # 根据图像的边界的像素值,向外扩充图片,每个方向扩充50个像素,常数填充:
        # dst = cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]])
        # dst = cv2.copyMakeBorder(img,50,50,50,50, cv2.BORDER_CONSTANT,value=[0,255,0])
        # 需要填充的宽度为 512-zoomWidth
        left = (512-zoomWidth)//2
        # 避免余数取不到
        right = left+1
        img = cv2.copyMakeBorder(img, 0,0,left,right, cv2.BORDER_CONSTANT, value=[0,0,0])
        img = img[0:512, 0:512]

    # 测试点
    # cv2.imshow('size512', img)

    return img

你可能感兴趣的:(Python)