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 ...
随机推荐
- libevent之evbuffer
目录 Evbuffers:缓冲 IO 的实用程序功能 简介 创建或释放 evbuffer Evbuffers 和线程安全 检查 evbuffer 向 evbuffer 添加数据:基础知识 将数据从一个 ...
- SpringBoot 文件打包zip,浏览器下载出去
本地文件打包 /** * 下载压缩包 * * @param response */ @ResponseBody @GetMapping("/downloadZip") public ...
- yb课堂实战之轮播图接口引入本地缓存 《二十一》
轮播图接口引入缓存 CacheKeyManager.java package net.ybclass.online_ybclass.config; /** * 缓存key管理类 */ public c ...
- 算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 215/10000 为模型找到最好的超参数是机器学习实践中最困难的部分之一 ...
- leetcode简单(数组、字符串):[219, 268, 349, 414, 485, 541, 557, 821, 925, 977]
目录 219. 存在重复元素 268. 丢失的数字 349. 两个数组的交集 414. 第三大的数 485. 最大连续 1 的个数 541. 反转字符串 II 557. 反转字符串中的单词 III 8 ...
- Error: Dynamic require of "path" is not supported
failed to load config from D:\BaiduSyncdisk\vue3\sys-manager\vite.config.jserror when starting dev s ...
- [oeasy]python0108_谷腾堡活字_哥特字体_罗马帝国_希腊文化_文艺复兴
谷腾堡活字 回忆上次内容 上次回顾了字型编码的进化过程 7-seg 七位数码管 显示数字 14-seg 十四位数码管 显示字母 添加图片注释,不超过 140 字(可选) 米字管 ...
- Vue 根据鼠标悬停目标元素上方显示、隐藏指定元素交互实现
Vue 根据鼠标悬停目标元素上方显示.隐藏指定元素交互实现 By:授客 QQ:1033553122 开发环境 win10 element-ui "2.13.1" vue &qu ...
- exp解析
1 #pragma once 2 #include <string> 3 #include <functional> 4 #include <type_traits> ...
- 安装jieba中文分词库
插入一条: 有个更快安装下载jieba的方法,用镜像下载,非常快,2秒就行 pip install jieba -i https://pypi.douban.com/simple/ 1.打开官方网站: ...