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的图像进行放大或缩小。

opencv
OpenCV: 开源计算机视觉库

生成初始图像


代码如下:

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 运行结果


三、最后 🤝

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

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

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

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

推荐内容
阅读全文
AI总结
GitHub 加速计划 / opencv31 / opencv
189
14
下载
OpenCV: 开源计算机视觉库
最近提交(Master分支:7 个月前 )
c1d71d53 imgproc: disable SIMD for compareHist(INTERSECT) if f64 is unsupported #27220 Close https://github.com/opencv/opencv/issues/24757 ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [x] There is a reference to the original bug report and related work - [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [ ] The feature is well documented and sample code can be built with the project CMake 9 小时前
db9df33d Transfer IPP polarToCart to HAL 18 小时前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐