Python的OpenCV转换图像大小
在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_width 或 max_height 参数。如果你想要查看调整大小后的图像,可以取消注释与 cv2.imshow 相关的代码行。但在实际的生产环境中,通常不会这样做,因为 cv2.imshow 需要一个GUI环境来显示图像。
Python的OpenCV转换图像大小的更多相关文章
- (转)使用Python和OpenCV检测图像中的物体并将物体裁剪下来
原文链接:https://blog.csdn.net/liqiancao/article/details/55670749 介绍 硕士阶段的毕设是关于昆虫图像分类的,代码写到一半,上周五导师又给我新的 ...
- OpenCV——改变图像大小
, , int interpolation=INTER_LINEAR ) dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不 ...
- 使用Python基于OpenCV的图像油画特效
算法步骤: 1.获取图像的灰度图片 2.设计一个小方框(4x4/8x8 /10x10等),统计每个小方框的像素值 3.将0-255的灰度值划分成几个等级,并把第二步处理的结果映射到所设置的各个等级中, ...
- 使用Python+OpenCV进行图像模板匹配(Match Template)
2017年9月22日 BY 蓝鲸 LEAVE A COMMENT 本篇文章介绍使用Python和OpenCV对图像进行模板匹配和识别.模板匹配是在图像中寻找和识别模板的一种简单的方法.以下是具体的步骤 ...
- Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python下opencv使用笔记(一)(图像简单读取、显示与储存)
写在之前 从去年開始关注python这个软件,途中间间断断看与学过一些关于python的东西.感觉python确实是一个简单优美.easy上手的脚本编程语言,众多的第三方库使得python异常的强大. ...
- Python 图像处理 OpenCV (5):图像的几何变换
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python 图像处理 OpenCV (14):图像金字塔
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python cv2 OpenCV 中传统图片格式与 base64 转换
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法.通过http传输图片常常将图片数据转换成base64之后再进行传输. Base64简 ...
- Python下opencv使用笔记(图像的平滑与滤波)
对于图形的平滑与滤波,但从滤波角度来讲,一般主要的目的都是为了实现对图像噪声的消除,增强图像的效果. 对于2D图像可以进行低通或者高通滤波操作 低通滤波(LPF):有利于去噪,模糊图像 高通滤波(HP ...
随机推荐
- Legacy (线段树优化建图)
题目链接:Legacy - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题解: 考虑题目中一个点向区间连边,如真的对区间中的每一点分别连边后跑最短路,时间空间都要炸. 因为是一个点向 ...
- OpenCV程序练习(一):图像基本操作
展示一张图片 代码 import cv2 img=cv2.imread("demoimg.png") #读取图像 cv2.imshow("demoName",i ...
- 基于Bootstrap Blazor开源的.NET通用后台权限管理系统
前言 今天大姚给大家分享一个基于Bootstrap Blazor开源的.NET通用后台权限管理系统,后台管理页面兼容所有主流浏览器,完全响应式布局(支持电脑.平板.手机等所有主流设备),可切换至 Bl ...
- 记一次使用python的selenium库爬取动态页面内容的经历
安装与配置selenium 安装selenium库 pip install selenium 配置浏览器驱动(本次使用Google Chrome) 打开Chrome,在浏览器的地址栏,输入chrome ...
- IBM Rational Rose Enterprise Edition 2007安装和破解
系统分析设计阶段:建模工具Rose使用比较广泛. 1.解压安装包,并双击setup.exe 2.安装Rose 3.选择Desktop installation from CD image 4.&quo ...
- jQuery 插件autocomplete 应用
项目中有时会用到自动补全查询,就像Google搜索框.淘宝商品搜索功能,输入汉字或字母,则以该汉字或字母开头的相关条目会显示出来供用户选择, autocomplete插件就是完成这样的功能. auto ...
- PN转Modbus RTU模块连接ACS4QQ变频器通信
一台完整的机器在出厂前由许多部件组成.但是,由于各种原因,这些组件来自不同的制造商,导致设备之间的通信协议存在差异.Modbus和Profinet代表两种不同的通信协议,Profinet通常用于较新的 ...
- PowerShell 基本使用
PowerShell Basic PowerShell Basic 简要 基本使用 PowerShell cmdlet 获取帮助 PowerShell 别名和参数 编写一个 PowerShell 脚本 ...
- java srpint boot 2.2.1 第二部份,乐观锁机制, 构造复杂查询条件,分页查询 相关内容,删除与软删除
第二部份,引起锁机制的原理和解决方案: 测试环境搭建第一步先建一个数据库表用于模拟商品购买. CREATE TABLE product ( id INT AUTO_INCREMENT PRIMARY ...
- Diffutoon下载介绍:真人视频转动漫工具,轻松获得上千点赞
最近在刷短视频的时候,偶尔能看到一些真人转动漫风的作品,看起来给人一种新鲜感,流量都还不错,简简单单跳个舞,就能获得上千个点赞~ 那么,这种视频是怎么制作的? 本期给大家介绍一款AI转绘工具Diffu ...