8 图像处理基础之图像变换与滤波
系列进度
OpenCV 教程 · 第 8 / 24 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
OpenCV 学习要把图像输入、处理步骤、检测结果和工程性能放在一起验证。阅读时可以按「图像变换 -> 图像缩放 -> 图像旋转 -> 图像裁剪」建立结构,再回到正文里的代码、案例或指标做验证。
读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「图像变换」,再查「图像缩放」。
在前一篇中,我们探讨了图像的基本操作,如图像的读取、显示以及基本的像素访问。这为我们后续的图像处理打下了良好的基础。在本篇中,我们将深入研究图像的变换与滤波,这将帮助我们提升图像的质量,进行特征提取,或直接修改图像的内容。
图像变换
图像变换是指在图像的空间域对图像进行各种操作,以达到特定的处理目标。下面我们将介绍一些常见的图像变换方法。
学习图像变换与滤波时,先看旋转、缩放、平移、模糊和锐化分别改变了什么信息。
1. 图像缩放
图像缩放是改变图像大小的过程。使用 OpenCV,我们可以通过 cv2.resize() 函数来实现。下面是一个简单的示例代码,演示如何实现图像缩放。
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 缩放图像
scaled_image = cv2.resize(image, (400, 300)) # 目标大小为400x300
# 显示缩放后的图像
cv2.imshow('Scaled Image', scaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 图像旋转
图像旋转通常使用旋转矩阵来实现。在 OpenCV 中,我们可以通过 cv2.getRotationMatrix2D() 函数获取旋转矩阵,然后使用 cv2.warpAffine() 函数进行旋转。以下是代码示例:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 获取图像中心
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
# 构造旋转矩阵
angle = 45 # 旋转角度
M = cv2.getRotationMatrix2D(center, angle, 1.0)
# 旋转图像
rotated_image = cv2.warpAffine(image, M, (w, h))
# 显示旋转后的图像
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 图像裁剪
图像裁剪是提取图像中某部分的操作。我们可以通过数组切片来实现图像裁剪。示例代码如下:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 裁剪区域 (y1:y2, x1:x2)
cropped_image = image[100:400, 150:450]
# 显示裁剪后的图像
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像滤波
图像滤波用于去噪或增强图像特征。以下为几种常见的图像滤波技术。
读完《图像处理基础之图像变换与滤波》不要只停在“看懂了”。回头挑一个步骤动手做一遍,再记录哪里卡住,后面的学习会更稳。
1. 均值滤波
均值滤波是一种简单的线性滤波,主要用于去噪。在 OpenCV 中,我们可以使用 cv2.blur() 或 cv2.boxFilter() 来实现。示例代码如下:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 均值滤波
blurred_image = cv2.blur(image, (5, 5)) # 5x5 的均值滤波器
# 显示滤波后的图像
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 高斯滤波
高斯滤波在去噪时效果更加明显,可以平滑图像,同时保留边缘信息。在 OpenCV 中,它使用 cv2.GaussianBlur() 实现。
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 高斯滤波
gaussian_blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
# 显示高斯滤波后的图像
cv2.imshow('Gaussian Blurred Image', gaussian_blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 中值滤波
中值滤波是非线性滤波的一种,特别适合于去除椒盐噪声。使用 OpenCV 的 cv2.medianBlur() 函数可以方便实现:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 中值滤波
median_blurred_image = cv2.medianBlur(image, 5)
# 显示中值滤波后的图像
cv2.imshow('Median Blurred Image', median_blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
读到这里,可以把《图像处理基础之图像变换与滤波》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。
读完《图像处理基础之图像变换与滤波》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。
小结
在本篇文章中,我们学习了图像变换与滤波的基本知识,包括缩放、旋转、裁剪以及多种滤波技术。这些技巧在处理实际图像时非常重要,能够有效地改进图像的质量并帮助我们进行特征检测。
下一篇我们将深入探讨特征检测与描述之特征点检测算法,包括 SIFT、SURF 和 ORB 等算法的使用。这将为图像匹配和物体识别等任务奠定基础。希望大家继续关注学习!
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
图像处理基础之图像变换与滤波适合谁读?
这是 OpenCV 教程 系列第 8 / 24 篇,适合正在学习OpenCV 教程,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇OpenCV教程要多久?
按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读