OpenCV: 图像缩放(cv2.resize)【一分钟弄清楚】

OpenCV: 图像缩放(cv2.resize)【一分钟弄清楚】

在这里插入图片描述

🌈 个人主页:高斯小哥
🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化Python基础【高质量合集】PyTorch零基础入门教程 👈 希望得到您的订阅和支持~
💡 创作高质量博文,分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)


  在图像处理和计算机视觉应用中,图像缩放是一个常见的操作。OpenCV库中的cv2.resize()函数是一个非常实用的工具,可以轻松地实现这一功能。本文将为你介绍如何使用cv2.resize()来缩放图像,让你在一分钟内掌握这个技能!


一、cv2.resize()函数简介

cv2.resize()函数用于调整图像的尺寸。它的基本语法如下:

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

参数说明:

  • src: 输入图像。
  • dsize: 输出图像的尺寸,可以是一个单元素的元组(仅指定宽度),或者两个元素的元组(宽度和高度)。
  • fxfy: 缩放因子,分别表示宽度和高度的缩放比例。如果未指定,则使用dsize参数。
  • interpolation: 插值方法,用于确定像素值。常用的插值方法有cv2.INTER_LINEAR(线性插值)、cv2.INTER_NEAREST(最近邻插值)等。

示例代码

下面是一个简单的示例,展示如何使用cv2.resize()函数将图像缩小为原尺寸的一半:

import cv2

# 读取图像
img = cv2.imread('input.jpg')

# 缩小图像尺寸为原尺寸的一半
height, width = img.shape[:2]
new_size = (width // 2, height // 2)
resized_img = cv2.resize(img, new_size, interpolation=cv2.INTER_LINEAR)

# 显示原图和缩放后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Resized Image', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意事项

在使用cv2.resize()函数时,需要注意以下几点:

  1. 确保输入图像是有效的,并且尺寸与期望的输出尺寸相匹配。否则,可能会导致错误或不可预测的结果。
  2. 根据需要选择合适的插值方法。不同的插值方法可能会对结果产生影响,特别是在放大图像时。
  3. 确保安装了正确版本的OpenCV库。不同版本的OpenCV可能在函数使用和参数上略有差异。

二、cv2.resize()函数实战

需求场景

欲对高为384,宽为512的图像进行放大或缩小。

生成初始图像


代码如下:

import cv2
import numpy as np

# 生成初始图像
img = np.zeros((384, 512), dtype=np.uint8) 
img[172:212, 32:-32] = 255
print(img.shape) # (高,宽) ---> (384, 512)

cv2.imshow('img', img)
cv2.waitKey(0)

运行结果如下:

在这里插入图片描述

图1 运行结果

将初始图像的【高】放大一倍(384 --> 768)


代码如下:

import cv2
import numpy as np

# 生成初始图像
img = np.zeros((384, 512), dtype=np.uint8)
img[172:212, 32:-32] = 255
H, W = img.shape # img.shape 分别记录了图像的【高】和【宽】 --> 【高前宽后】
print("before", H, W) # 384 512

# 可行的方案1 ———— 使用cv2.resize函数的dsize参数指定输出图像的宽高
# dsize的第一个参数指定的是输出图像的【宽】,第二个才是【高】 --> 【宽前高后】
# --> 与img.shape正好相反,使用cv2.resize函数的dsize参数需要特别注意。
img = cv2.resize(img, dsize=(W, H*2)) # 注意dsize参数的使用方式


# 可行的方案2 ———— 使用cv2.resize函数的fy参数
# 要点1: fy=2表示沿着y轴(高)方向放大一倍;
# 要点2: fx=1虽然没有起到作用,但不可省略;
# 要点3: dsize参数必须设置为None;
img = cv2.resize(img, dsize=None, fx=1, fy=2)) # 沿着高的方向将初始图像放大一倍
# fx = 2, fy = 1 ---> 宽放大一倍,高保持不变
# fx = 0.5, fy = 1 ---> 宽缩小为原来1/2,高保持不变
# fx = 1, fy = 0.5 ---> 高缩小为原来1/2,宽保持不变

# 打印新图像大小
new_H, new_W = img.shape
print("after", new_H, new_W) # 768 512

# 显示图像
cv2.imshow('img', img)
cv2.waitKey(0)

运行结果如下:
在这里插入图片描述

在这里插入图片描述

图2 运行结果


三、最后 🤝

  亲爱的读者,感谢您每一次停留和阅读,这是对我们最大的支持和鼓励!🙏在茫茫网海中,您的关注让我们深感荣幸。您的独到见解和建议,如明灯照亮我们前行的道路。🌟若在阅读中有所收获,一个赞或收藏,对我们意义重大。

  我们承诺,会不断自我挑战,为您呈现更精彩的内容。📚有任何疑问或建议,欢迎在评论区畅所欲言,我们时刻倾听。💬让我们携手在知识的海洋中航行,共同成长,共创辉煌!🌱🌳感谢您的厚爱与支持,期待与您共同书写精彩篇章!

  您的点赞👍、收藏🌟、评论💬和关注💖,是我们前行的最大动力!

  🎉 感谢阅读,祝你编程愉快! 🎉

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高斯小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值