OpenCV图像缩放与裁剪

Python OpenCV图像处理基础教程

一、OpenCV简介

OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉和机器学习软件库。它提供了大量的图像和视频处理功能,可以用于各种应用场景,比如人脸识别、物体检测、图像分割等。

二、安装OpenCV

# 安装OpenCV pip install opencv-python # 安装OpenCV增强版(包含额外功能) pip install opencv-contrib-python

三、图像缩放

在Python中使用opencv-python对图像进行缩放非常简单,可以使用resize函数对图像进行缩放。

1. 基本语法

import cv2 # 读取图像 img = cv2.imread('image.jpg') # 缩放图像 # 方法1:指定具体尺寸 resized = cv2.resize(img, (width, height)) # 方法2:指定缩放比例 scale_percent = 50 # 50% width = int(img.shape[1] * scale_percent / 100) height = int(img.shape[0] * scale_percent / 100) resized = cv2.resize(img, (width, height))

2. 插值方法

方法 说明
cv2.INTER_NEAREST 最近邻插值,速度最快,质量最差
cv2.INTER_LINEAR 双线性插值,默认方法,质量与速度平衡
cv2.INTER_CUBIC 双三次插值,质量较好,速度较慢
cv2.INTER_LANCZOS4 Lanczos插值,质量最好,速度最慢

3. 使用示例

import cv2 img = cv2.imread('image.jpg') # 放大图像 - 使用INTER_CUBIC或INTER_LINEAR enlarged = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) # 缩小图像 - 使用INTER_AREA reduced = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA) cv2.imwrite('enlarged.jpg', enlarged) cv2.imwrite('reduced.jpg', reduced)

四、图像裁剪

图像裁剪是从图像中提取感兴趣区域(ROI)的过程。

1. 基本裁剪

import cv2 img = cv2.imread('image.jpg') # 裁剪图像 [行范围, 列范围] # 格式: img[y1:y2, x1:x2] cropped = img[100:400, 200:500] # 从(200,100)裁剪到(500,400) cv2.imwrite('cropped.jpg', cropped)

2. 裁剪示例图解

原图尺寸: 640x480
裁剪区域: x1=200, y1=100, x2=500, y2=400
裁剪后尺寸: 300x300
                

3. 批量裁剪多个区域

import cv2 img = cv2.imread('image.jpg') # 定义多个裁剪区域 regions = [ (0, 0, 200, 200), # 区域1 (200, 0, 400, 200), # 区域2 (0, 200, 200, 400), # 区域3 (200, 200, 400, 400) # 区域4 ] for i, (x1, y1, x2, y2) in enumerate(regions): cropped = img[y1:y2, x1:x2] cv2.imwrite(f'cropped_{i+1}.jpg', cropped)

五、综合示例:图像缩放+裁剪

import cv2 def resize_and_crop(image_path, target_size, crop_area): """ 图像缩放并裁剪 image_path: 输入图像路径 target_size: 目标尺寸 (width, height) crop_area: 裁剪区域 (x1, y1, x2, y2) """ img = cv2.imread(image_path) # 1. 缩放图像 resized = cv2.resize(img, target_size, interpolation=cv2.INTER_LINEAR) # 2. 裁剪图像 x1, y1, x2, y2 = crop_area cropped = resized[y1:y2, x1:x2] return cropped # 使用示例 result = resize_and_crop('input.jpg', (800, 600), (100, 50, 700, 550)) cv2.imwrite('output.jpg', result)

六、注意事项

  • OpenCV中图像坐标原点在左上角,x向右增加,y向下增加
  • 裁剪时确保坐标在图像范围内,否则会报错
  • 放大图像时推荐使用INTER_CUBIC或INTER_LINEAR
  • 缩小图像时推荐使用INTER_AREA,可获得最佳效果
  • 处理完成后记得使用cv2.imwrite()保存图像

七、总结

OpenCV是Python中最常用的图像处理库,无论是处理图像还是视频,都能提供强大的支持。特别是在进行图像缩放和裁剪时,cv2.resize函数和数组切片操作非常实用。掌握这些基础操作是进行更复杂图像处理的前提。