OpenCV 学习2 -调整图像大小

在你需要调整图像大小时,需要考虑的是指定的比例因子沿每个轴(高度和宽度)缩放图像,或者只设置所需的高度和宽度。

在调整图像大小时,你需要意识到:

  • 减小图像大小需要对像素进行重新采样
  • 增加图像大小需要重建图像。这意味着需要插入新的像素
  • 为保持比例,请记住图像的原始纵横比

1、resize() 函数说明

resize() 是 OpenCV 中用于调整图像大小的核心函数,支持多种插值方法和缩放方式。

resized_image = cv2.resize(src, dsize, fx=None, fy=None, interpolation=cv2.INTER_LINEAR)

  • 参数说明
参数 类型 说明
src NumPy 数组 输入图像(必须是 NumPy ndarray,一般由 cv2.imread 读取)
dsize tuple (width, height) 输出图像的尺寸,格式是 (宽, 高)
fx float(可选) 水平方向缩放因子,例如 fx=0.5 表示宽度缩小一半
fy float(可选) 垂直方向缩放因子,例如 fy=2.0 表示高度放大两倍
interpolation 插值方法 缩放时使用的算法,影响图像质量

⚠️ 注意

如果指定了 dsize,则忽略 fx 和 fy

如果 dsize=(0,0) 且提供了 fx 和 fy,OpenCV 会自动计算目标大小

常用插值方法(interpolation)

插值方法 OpenCV常量 说明
最近邻插值 cv2.INTER_NEAREST 直接取原图中最近像素的值,产生明显的锯齿和块状效应;适合像素艺术、实时应用、速度优先
双线性插值 cv2.INTER_LINEAR 默认,使用2×2邻域的线性加权平均,比最近邻平滑,可能轻微模糊;适合大多数通用缩放场景
双三次插值 cv2.INTER_CUBIC 基于4×4邻域的bicubic函数计算,比双线性更平滑,边缘保持更好;适合图像放大,特别是照片类图像
区域插值 cv2.INTER_AREA 考虑像素面积关系,平均像素值,缩小图像时避免出现摩尔纹和锯齿;最适合缩小图像

2、代码示例:指定宽度和高度调整大小

python 复制代码
import cv2
import os


img_path = "img/dog.jpg"
if not os.path.exists(img_path):
    raise FileNotFoundError(f"未找到图像文件{img_path}")

img = cv2.imread(img_path, cv2.IMREAD_COLOR)

if img is None:
     print("读取图片失败")
     exit()

# img.shape 返回一个元组, 包含图像的高度、宽度和通道数
height, width, channels = img.shape

print(f'宽度: {width} 像素')
print(f'高度: {height} 像素')
print(f'通道数: {channels}')

# 使用新的宽度和高度缩小图像
resized_tuple = (500, 600)
resized_img = cv2.resize(img , resized_tuple, interpolation=cv2.INTER_AREA)

# 显示原图和缩小后的图像
cv2.imshow("Original Image", img)
cv2.imshow("Resized Image", resized_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

3、代码示例:使用缩放因子调整大小

python 复制代码
import cv2
import numpy as np
import os


img_path = "img/dog.jpg"
if not os.path.exists(img_path):
    raise FileNotFoundError(f"未找到图像文件{img_path}")

img = cv2.imread(img_path, cv2.IMREAD_COLOR)

if img is None:
     print("读取图片失败")
     exit()

# 指定两个缩放因子将图像放大1.1倍
scale_up_x = 1.1
scale_up_y = 1.1

#指定一个比例因子,将图像缩小0.6倍
scale_down = 0.6


scaled_up_img = cv2.resize(img , None, scale_up_x, scale_up_y, cv2.INTER_CUBIC)
scaled_down_img = cv2.resize(img , None, scale_down, scale_down, cv2.INTER_LINEAR)

# 显示原图和缩小后的图像
cv2.imshow("scaled_up_img", scaled_up_img)
cv2.imshow("scaled_down_img", scaled_down_img)

cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
格林威10 分钟前
Baumer相机玻璃制品裂纹自动检测:提高透明材质检测精度的 6 个关键步骤,附 OpenCV+Halcon 实战代码!
人工智能·opencv·视觉检测·材质·工业相机·sdk开发·堡盟相机
没有不重的名么1 天前
Multiple Object Tracking as ID Prediction
深度学习·opencv·计算机视觉·目标跟踪
愚者游世1 天前
Opencv知识点大纲
人工智能·opencv·计算机视觉
格林威1 天前
Baumer相机电池极耳对齐度检测:提升叠片工艺精度的 5 个实用方案,附 OpenCV+Halcon 实战代码!
人工智能·opencv·机器学习·计算机视觉·视觉检测·工业相机·堡盟相机
403240731 天前
【Jetson开发避坑】虚拟环境(Conda/Venv)调用系统底层OpenCV与TensorRT的终极指南
人工智能·opencv·conda
格林威1 天前
Baumer相机电机转子偏心检测:实现动平衡预判的 5 个核心方法,附 OpenCV+Halcon 实战代码!
人工智能·深度学习·opencv·机器学习·计算机视觉·视觉检测·工业相机
侯孟禹1 天前
Gemini写的抠图工具
qt·opencv
qwy7152292581631 天前
17-像素点和ROI操作
人工智能·opencv·计算机视觉
茶栀(*´I`*)1 天前
OpenCV实战:从视频读写到高级目标追踪(MeanShift与CamShift详解)
图像处理·opencv·计算机视觉
Qt学视觉2 天前
3D3-PCL全面总结
c++·opencv·3d