• Python-OpenCV中的resize()函数


    改变图像大小意味着改变尺寸,无论是单独的高或宽,还是两者。也可以按比例调整图像大小。

    这里将介绍resize()函数的语法及实例。

    语法

    函数原型

    cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

    参数:

    参数 描述
    src 【必需】原图像
    dsize 【必需】输出图像所需大小
    fx 【可选】沿水平轴的比例因子
    fy 【可选】沿垂直轴的比例因子
    interpolation

    【可选】插值方式

    其中插值方式有很多种:

    cv.INTER_NEAREST 最近邻插值
    cv.INTER_LINEAR 双线性插值
    cv.INTER_CUBIC 双线性插值
    cv.INTER_AREA 使用像素区域关系重新采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像被缩放时,它类似于INTER_NEAREST方法。

    通常的,缩小使用cv.INTER_AREA,放缩使用cv.INTER_CUBIC(较慢)和cv.INTER_LINEAR(较快效果也不错)。默认情况下,所有的放缩都使用cv.INTER_LINEAR。

    例子

    保留高宽比

    以下是我们将在其上进行实验的尺寸(149,200,4)(高度,宽度,通道数)的原始图像:

     import cv2
     
    img = cv2.imread('./Pictures/python.png', cv2.IMREAD_UNCHANGED)
     
    print('Original Dimensions : ',img.shape)
     
    scale_percent = 60       # percent of original size
    width = int(img.shape[1] * scale_percent / 100)
    height = int(img.shape[0] * scale_percent / 100)
    dim = (width, height)
    # resize image
    resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
     
    print('Resized Dimensions : ',resized.shape)
     
    cv2.imshow("Resized image", resized)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
     

    结果:

    Original Dimensions : (149, 200, 4)
    Resized Dimensions : (89, 120, 4)

    调节scale_percent可以放大或缩小。需要准备shape先高再宽,参数是先宽再高。

    还有一种方式,就是使用自带的参数fx和fy,更加方便。

    import cv2
    img = cv2.imread("./Pictures/python.png")
    print('Original Dimensions : ', img.shape)
    
    resized = cv2.resize(img, None, fx=0.6, fy=0.6, interpolation=cv2.INTER_AREA)
    
    print('Resized Dimensions : ',resized.shape)
    
    cv2.imshow("resized_img", resized)
    cv2.waitKey(0)

    不保留高宽比

    例如,改变宽度,高度不变:

    import cv2
    
    img = cv2.imread("./Pictures/python.png")
    
    print('Original Dimensions : ',img.shape)
     
    width = 440
    height = img.shape[0] # keep original height
    dim = (width, height)
     
    # resize image
    resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
     
    print('Resized Dimensions : ',resized.shape)
     
    cv2.imshow("Resized image", resized)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    结果:

    Original Dimensions : (149, 200, 4)
    Resized Dimensions : (149, 440, 4)

    指定高和宽

    给定高和宽的像数值。

    import cv2
    
    img = cv2.imread("./Pictures/python.png")
    
    print('Original Dimensions : ',img.shape)
     
    width = 350
    height = 450
    dim = (width, height)
     
    # resize image
    resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
     
    print('Resized Dimensions : ',resized.shape)
     
    cv2.imshow("Resized image", resized)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    结果:

    Original Dimensions : (149, 200, 4)
    Resized Dimensions : (450, 350, 4)

    参考链接:

  • 相关阅读:
    分享:两个栈实现一个队列的功能
    分享:要关注技术,但也要关注所做的事情
    linux网络编程中阻塞和非阻塞socket的区别
    分享:C++参数传递方式
    linux非阻塞socket教程
    有用和有趣的产品秤砣
    查找 grep r TFramedTransport *
    分享:SecureCRT使用VIM语法高亮
    linux 非阻塞 socket Google 搜索
    linux c语言 select函数用法 ITeye技术网站
  • 原文地址:https://www.cnblogs.com/lfri/p/10596530.html
Copyright © 2020-2023  润新知