8 图像处理基础之图像变换与滤波

在前一篇中,我们探讨了图像的基本操作,如图像的读取、显示以及基本的像素访问。这为我们后续的图像处理打下了良好的基础。在本篇中,我们将深入研究图像的变换与滤波,这将帮助我们提升图像的质量,进行特征提取,或直接修改图像的内容。

图像变换

图像变换是指在图像的空间域对图像进行各种操作,以达到特定的处理目标。下面我们将介绍一些常见的图像变换方法。

1. 图像缩放

图像缩放是改变图像大小的过程。使用 OpenCV,我们可以通过 cv2.resize() 函数来实现。下面是一个简单的示例代码,演示如何实现图像缩放。

1
2
3
4
5
6
7
8
9
10
11
12
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() 函数进行旋转。以下是代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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. 图像裁剪

图像裁剪是提取图像中某部分的操作。我们可以通过数组切片来实现图像裁剪。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
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() 来实现。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
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() 实现。

1
2
3
4
5
6
7
8
9
10
11
12
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() 函数可以方便实现:

1
2
3
4
5
6
7
8
9
10
11
12
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 等算法的使用。这将为图像匹配和物体识别等任务奠定基础。希望大家继续关注学习!

8 图像处理基础之图像变换与滤波

https://zglg.work/opencv-tutorial/8/

作者

IT教程网(郭震)

发布于

2024-08-13

更新于

2024-08-13

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论