我是靠谱客的博主 粗暴夕阳,最近开发中收集的这篇文章主要介绍基于opencv的图像等比例缩放,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

项目中图片经常需要resize,但是直接调用resize方法可能会使图像造成畸变,下面给出,基于opencv的图像等比例缩放的方法。

import cv2

def resize_keep_aspectratio(image_src, dst_size):
    src_h, src_w = image_src.shape[:2]
    print(src_h, src_w)
    dst_h, dst_w = dst_size

    # 判断应该按哪个边做等比缩放
    h = dst_w * (float(src_h) / src_w)  # 按照w做等比缩放
    w = dst_h * (float(src_w) / src_h)  # 按照h做等比缩放

    h = int(h)
    w = int(w)

    if h <= dst_h:
        image_dst = cv2.resize(image_src, (dst_w, int(h)))
    else:
        image_dst = cv2.resize(image_src, (int(w), dst_h))

    h_, w_ = image_dst.shape[:2]
    print(h_, w_)

    top = int((dst_h - h_) / 2)
    down = int((dst_h - h_ + 1) / 2)
    left = int((dst_w - w_) / 2)
    right = int((dst_w - w_ + 1) / 2)

    value = [0, 0, 0]
    borderType = cv2.BORDER_CONSTANT
    print(top, down, left, right)
    image_dst = cv2.copyMakeBorder(image_dst, top, down, left, right, borderType, None, value)

    return image_dst

if __name__ == '__main__':
    image_src = cv2.imread(r"testimg/bus.jpg")
    dst_size = (720, 720)
    image = resize_keep_aspectratio(image_src, dst_size)
    cv2.imshow("aaa", image)
    print(image.shape)
    if 27 == cv2.waitKey():
        cv2.destroyAllWindows()

最后

以上就是粗暴夕阳为你收集整理的基于opencv的图像等比例缩放的全部内容,希望文章能够帮你解决基于opencv的图像等比例缩放所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部