Python使用OpenCV转换图像大小

 更新时间:2024年09月10日 09:59:39   作者:Tech Synapse  
在Python中,使用OpenCV库来转换图像大小是一个常见的操作,它可以帮助你调整图像到特定的尺寸,以适应不同的应用场景,比如图像预处理、模型输入等,下面是一个详细的代码示例,展示了如何使用OpenCV来转换图像的大小,需要的朋友可以参考下

在Python中,使用OpenCV库来转换图像大小是一个常见的操作,它可以帮助你调整图像到特定的尺寸,以适应不同的应用场景,比如图像预处理、模型输入等。下面是一个详细的代码示例,展示了如何使用OpenCV来转换图像的大小。

首先,确保你已经安装了OpenCV库。如果还没有安装,可以通过pip安装:

pip install opencv-python

接下来,是一个完整的Python脚本,它加载一个图像文件,将其大小转换为指定的宽度和高度,然后显示并保存转换后的图像。

import cv2  
  
def resize_image(input_image_path, output_image_path, width=None, height=None, inter=cv2.INTER_AREA):  
    """  
    调整图像大小  
  
    :param input_image_path: 输入图像的路径  
    :param output_image_path: 输出图像的路径  
    :param width: 目标宽度,如果为None,则不改变宽度  
    :param height: 目标高度,如果为None,则不改变高度  
    :param inter: 插值方法,默认为cv2.INTER_AREA(适用于缩小图像)  
    :return: None  
    """  
    # 读取图像  
    image = cv2.imread(input_image_path)  
    if image is None:  
        print(f"Error: Unable to load image at {input_image_path}")  
        return  
  
    # 检查是否指定了宽度和高度  
    if width is None and height is None:  
        print("Error: Both width and height cannot be None.")  
        return  
  
    # 如果只指定了宽度或高度,则计算另一个维度以保持图像的宽高比  
    if width is None:  
        width = int(image.shape[1] * (height / float(image.shape[0])))  
    elif height is None:  
        height = int(image.shape[0] * (width / float(image.shape[1])))  
  
    # 调整图像大小  
    resized_image = cv2.resize(image, (width, height), interpolation=inter)  
  
    # 显示图像(可选)  
    cv2.imshow('Resized Image', resized_image)  
    cv2.waitKey(0)  # 等待按键  
    cv2.destroyAllWindows()  
  
    # 保存图像  
    cv2.imwrite(output_image_path, resized_image)  
  
# 使用示例  
input_image = 'path_to_your_image.jpg'  # 替换为你的图像路径  
output_image = 'resized_image.jpg'  
resize_image(input_image, output_image, width=640, height=480)

在这个示例中,resize_image函数接受输入图像的路径、输出图像的路径、目标宽度、目标高度以及插值方法作为参数。它首先读取图像,然后检查是否指定了宽度和高度。如果只指定了其中一个,则根据原始图像的宽高比计算另一个维度。之后,使用cv2.resize函数调整图像大小,并通过cv2.imshow显示图像(这是可选的,主要用于调试),最后使用cv2.imwrite保存调整大小后的图像。

请确保将'path_to_your_image.jpg'替换为你自己的图像文件路径,并根据需要调整目标宽度和高度。

这里我会提供一个稍微不同的例子,这次我们将专注于只指定宽度或高度中的一个参数,让OpenCV自动根据原始图像的宽高比计算另一个维度,以确保图像不会失真。

import cv2  
  
def resize_image_keep_aspect_ratio(input_image_path, output_image_path, max_width=None, max_height=None, inter=cv2.INTER_AREA):  
    """  
    调整图像大小,同时保持宽高比  
  
    :param input_image_path: 输入图像的路径  
    :param output_image_path: 输出图像的路径  
    :param max_width: 最大宽度,如果为None,则不限制宽度  
    :param max_height: 最大高度,如果为None,则不限制高度  
    :param inter: 插值方法,默认为cv2.INTER_AREA(适用于缩小图像)  
    :return: None  
    """  
    # 读取图像  
    image = cv2.imread(input_image_path)  
    if image is None:  
        print(f"Error: Unable to load image at {input_image_path}")  
        return  
  
    # 获取原始图像的宽高  
    height, width = image.shape[:2]  
  
    # 计算新的尺寸  
    if max_width is None and max_height is None:  
        print("Error: Both max_width and max_height cannot be None.")  
        return  
    elif max_width is None:  
        max_width = int(width * (max_height / float(height)))  
    elif max_height is None:  
        max_height = int(height * (max_width / float(width)))  
    else:  
        # 确保宽度和高度不会超过指定的最大值,同时保持宽高比  
        ratio = min(max_width / width, max_height / height)  
        max_width = int(width * ratio)  
        max_height = int(height * ratio)  
  
    # 调整图像大小  
    resized_image = cv2.resize(image, (max_width, max_height), interpolation=inter)  
  
    # 保存图像  
    cv2.imwrite(output_image_path, resized_image)  
  
    # 可选:显示图像(注意,在生产环境中通常不会这样做)  
    # cv2.imshow('Resized Image with Aspect Ratio', resized_image)  
    # cv2.waitKey(0)  
    # cv2.destroyAllWindows()  
  
# 使用示例  
input_image = 'your_image.jpg'  # 替换为你的图像文件路径  
output_image = 'resized_image_with_aspect_ratio.jpg'  
resize_image_keep_aspect_ratio(input_image, output_image, max_width=800)  # 只指定最大宽度  
# 或者  
# resize_image_keep_aspect_ratio(input_image, output_image, max_height=600)  # 只指定最大高度

在这个例子中,resize_image_keep_aspect_ratio 函数允许你通过指定最大宽度或最大高度来调整图像大小,同时保持图像的原始宽高比。如果同时指定了最大宽度和最大高度,函数将计算一个缩放比例,该比例是两者中较小的那个,以确保图像不会超过这两个限制中的任何一个。

请记得将 'your_image.jpg' 替换为你自己的图像文件路径,并根据需要调整 max_width 或 max_height 参数。如果你想要查看调整大小后的图像,可以取消注释与 cv2.imshow 相关的代码行。但在实际的生产环境中,通常不会这样做,因为 cv2.imshow 需要一个GUI环境来显示图像。

以上就是Python使用OpenCV转换图像大小的详细内容,更多关于Python OpenCV图像大小的资料请关注脚本之家其它相关文章!

相关文章

  • python requests模拟登陆github的实现方法

    python requests模拟登陆github的实现方法

    这篇文章主要介绍了python requests模拟登陆github的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • python3实现抓取网页资源的 N 种方法

    python3实现抓取网页资源的 N 种方法

    这两天学习了python3实现抓取网页资源的方法,发现了很多种方法,所以,今天添加一点小笔记。
    2017-05-05
  • Python实现去除列表中重复元素的方法小结【4种方法】

    Python实现去除列表中重复元素的方法小结【4种方法】

    这篇文章主要介绍了Python实现去除列表中重复元素的方法,结合实例形式总结分析了Python列表去重的4种实现方法,涉及Python针对列表的遍历、判断、排序等相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • Python实现i人事自动打卡的示例代码

    Python实现i人事自动打卡的示例代码

    这篇文章主要介绍了Python实现i人事自动打卡的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 基于Python os模块常用命令介绍

    基于Python os模块常用命令介绍

    下面小编就为大家带来一篇基于Python os模块常用命令介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • python爬虫用scrapy获取影片的实例分析

    python爬虫用scrapy获取影片的实例分析

    在本篇内容里小编给大家整理的是一篇关于python爬虫用scrapy获取影片的实例分析内容,有兴趣的朋友们可以参考下。
    2020-11-11
  • Python使用三种方法实现PCA算法

    Python使用三种方法实现PCA算法

    这篇文章主要介绍了Python使用三种方法实现PCA算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • python中的__init__ 、__new__、__call__小结

    python中的__init__ 、__new__、__call__小结

    这篇文章主要介绍了python中的__init__ 、__new__、__call__小结,需要的朋友可以参考下
    2014-04-04
  • Python基础篇之字符串方法总结

    Python基础篇之字符串方法总结

    Python提供了丰富的字符串处理方法,可以方便地对字符串进行操作、处理和转换。在本文中,我们将介绍Python中常用的字符串方法,需要的可以参考一下
    2023-04-04
  • Python 代码调试技巧示例代码

    Python 代码调试技巧示例代码

    这篇文章主要介绍了Python 代码调试技巧,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论