首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Python的OpenCV转换图像大小

编程知识
2024年08月23日 22:44

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

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

bash复制代码

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_widthmax_height 参数。如果你想要查看调整大小后的图像,可以取消注释与 cv2.imshow 相关的代码行。但在实际的生产环境中,通常不会这样做,因为 cv2.imshow 需要一个GUI环境来显示图像。

From:https://www.cnblogs.com/TS86/p/18377247
本文地址: http://shuzixingkong.net/article/1387
0评论
提交 加载更多评论
其他文章 关于对 Tomcat 进行小版本升级的快速解决方案
1、背景描述 原来的 Tomcat 在部署时,使用的是最新的版本 9.0.40 。 经过一段时间后,在原来的 Tomcat 版本中,发现存在漏洞。 因此,需要将旧版本(9.0.40)升级到没有漏洞的新版本(9.0.93)。 2、查看Tomcat的版本信息 如上图所示,在 tomcat 的 bin 目
关于对 Tomcat 进行小版本升级的快速解决方案 关于对 Tomcat 进行小版本升级的快速解决方案 关于对 Tomcat 进行小版本升级的快速解决方案
线性dp:编辑距离
编辑距离 本题与力扣72.编辑距离题意一样,阅读完本文可以尝试leetcode72. 力扣题目链接 题目叙述 输入两个字符串a,b。输出从字符串a修改到字符串b时的编辑距离 输入 NOTV LOVER 输出 4 题目解释: 动态规划思路 这个问题显然是一个最优解问题,我们可以考虑动态规划的思路,那么
线性dp:编辑距离 线性dp:编辑距离 线性dp:编辑距离
一文讲清楚static关键字
static能修饰的地方 静态变量 静态变量: 又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它;静态变量在内存中只存在一份。 实例变量: 每创建一个实例就会产生一个实例变量,它与该实例同生共死。 静态方法 静态方法在类加载的时候就存在了,它不依赖于任何实
平衡搜索树-AVL树 图文详解 (万字长文)
目录AVL树AVL树的概念AVL树节点的定义:AVL树的插入基本情况分析平衡因子对应的操作旋转操作分析需要旋转的情况结论4种旋转操方法与特征6种双旋平衡因子特征代码实现四种旋转实现插入操作实现树高度与是否平衡树判断实现其他实现插入验证BenchMark环境测试工具和方法测试结果: AVL树 AVL树
平衡搜索树-AVL树  图文详解  (万字长文) 平衡搜索树-AVL树  图文详解  (万字长文) 平衡搜索树-AVL树  图文详解  (万字长文)
全网最适合入门的面向对象编程教程:37 Python常用复合数据类型-列表和列表推导式
在Python中,列表是一个非常灵活且常用的复合数据类型。它允许存储多个项,这些项可以是任意的数据类型,包括其他列表。列表推导式是一种简洁的方式来创建和操作列表。
全网最适合入门的面向对象编程教程:37 Python常用复合数据类型-列表和列表推导式 全网最适合入门的面向对象编程教程:37 Python常用复合数据类型-列表和列表推导式 全网最适合入门的面向对象编程教程:37 Python常用复合数据类型-列表和列表推导式
推荐7款美观且功能强大的WPF UI库
前言 经常看到有小伙伴在DotNetGuide技术社区交流群里提问:WPF有什么好用或者好看的UI组件库推荐的?,今天大姚给大家分享7款开源、美观、功能强大、简单易用的WPF UI组件库。 WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵
推荐7款美观且功能强大的WPF UI库 推荐7款美观且功能强大的WPF UI库 推荐7款美观且功能强大的WPF UI库
004.MinIO-DirectPV分布式存储部署
MinIO部署介绍 部署概述 Kubernetes hostpath、local和本地静态配置都存在需要事先在node节点准备好可用的块存储或文件系统,例如对插入的硬盘,或者磁盘阵列做分区格式化,文件系统则需提前创建好Kubernetes即将利用的挂载目录,并且两种方法都会有亲和性限制,无法做到让K
004.MinIO-DirectPV分布式存储部署 004.MinIO-DirectPV分布式存储部署 004.MinIO-DirectPV分布式存储部署
Tesla 开发者 API 指南:BLE 发送车辆命令
前言 特斯拉提供两种与汽车通信的方式。一种是使用 API 通过互联网,另一种是使用 BLE 连接。BLE 连接有助于锁定和解锁汽车的最重要部分之一,即使汽车和手机或任何其他兼容 BLE 的钥匙扣上没有网络连接。这在两种主要用例中很有帮助,即使在互联网非常不稳定的情况下也是如此。 离开汽车时锁好车 当
Tesla 开发者 API 指南:BLE  发送车辆命令