在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环境来显示图像。

Python的OpenCV转换图像大小的更多相关文章

  1. (转)使用Python和OpenCV检测图像中的物体并将物体裁剪下来

    原文链接:https://blog.csdn.net/liqiancao/article/details/55670749 介绍 硕士阶段的毕设是关于昆虫图像分类的,代码写到一半,上周五导师又给我新的 ...

  2. OpenCV——改变图像大小

    , , int interpolation=INTER_LINEAR ) dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不 ...

  3. 使用Python基于OpenCV的图像油画特效

    算法步骤: 1.获取图像的灰度图片 2.设计一个小方框(4x4/8x8 /10x10等),统计每个小方框的像素值 3.将0-255的灰度值划分成几个等级,并把第二步处理的结果映射到所设置的各个等级中, ...

  4. 使用Python+OpenCV进行图像模板匹配(Match Template)

    2017年9月22日 BY 蓝鲸 LEAVE A COMMENT 本篇文章介绍使用Python和OpenCV对图像进行模板匹配和识别.模板匹配是在图像中寻找和识别模板的一种简单的方法.以下是具体的步骤 ...

  5. Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  6. Python下opencv使用笔记(一)(图像简单读取、显示与储存)

    写在之前 从去年開始关注python这个软件,途中间间断断看与学过一些关于python的东西.感觉python确实是一个简单优美.easy上手的脚本编程语言,众多的第三方库使得python异常的强大. ...

  7. Python 图像处理 OpenCV (5):图像的几何变换

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  8. Python 图像处理 OpenCV (14):图像金字塔

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  9. Python cv2 OpenCV 中传统图片格式与 base64 转换

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法.通过http传输图片常常将图片数据转换成base64之后再进行传输. Base64简 ...

  10. Python下opencv使用笔记(图像的平滑与滤波)

    对于图形的平滑与滤波,但从滤波角度来讲,一般主要的目的都是为了实现对图像噪声的消除,增强图像的效果. 对于2D图像可以进行低通或者高通滤波操作 低通滤波(LPF):有利于去噪,模糊图像 高通滤波(HP ...

随机推荐

  1. W5100 硬件协议栈 调试经验

    --- title: W5100 硬件协议栈 调试经验 date: 2020-06-21 11:22:33 categories: tags: - debug - tcpip - w5100 - su ...

  2. Linux 驱动需要考虑的同步问题

    --- title: Linux 驱动需要考虑的同步问题 date: 2020-06-22 07:21:32 categories: tags: - ipc - linux - kernel - dr ...

  3. hadoop集群配置文件

    配置文件与功能对应: 修改core-site.xml文件 <property> <name>fs.defaultFS</name> <!--配置hdfs系统的 ...

  4. MySQL与Redis数据双写一致性工程落地案例

    复习-面试题 多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它. 其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存. 后面的线程 ...

  5. yb课堂 视频详情页模块开发《三十八》

    CourseDetail基础模块开发 CourseDetail模块开发,拆分组件 CourseDetail.vue Header.vue Course.vue Tab.vue Summary.vue ...

  6. 【算法】在vue3的ts代码中分组group聚合源数据列表

    有一个IList<any>()对象列表, 示例数据为[{id:'1',fieldName:'field1',value:'1'},{id:'1',fieldName:'field2',va ...

  7. ArchSummit回顾:从云原生到实时数据湖,架构如何支撑业务发展

    [点击了解更多网易热点] 数字化.自动化.智能化的主旋律下,架构的进化也在提速.在近日举办的ArchSummit全球架构师峰会上,网易数帆高级技术专家.资深架构师裴斐和网易数帆高级技术专家周劲松分别分 ...

  8. [MAUI 项目实战] 笔记App(二):数据库设计

    @ 目录 Sqlite配置 创建实体 笔记实体类 笔记分组实体 笔记片段实体 笔记片段负载实体 笔记片段仓库实体 笔记模板(场景)实体 笔记片段模板实体 笔记片段模板负载实体 配置EF 创建映射 迁移 ...

  9. CF1468N 题解

    洛谷链接&CF 链接 题目简述 共有 \(T\) 组数据,对于每组数据: 有三个桶,五种垃圾,每个桶有固定的容量. 前三种垃圾分别放入三种桶中,第四种垃圾可以放进 \(1,3\) 桶中,第五种 ...

  10. Arch Linux install i3-wm

    Arch Linux install i3-wm 简介 i3-wm 是一种动态的平铺式窗口管理器,它的设计目标是提供一个快速.简洁.可定制的桌面环境,适合开发者和高级用户使用.它有以下几个特点: 它使 ...