5 图像处理基础之基本图像处理技术
系列进度
计算机视觉网络教程 · 第 5 / 31 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
基础图像处理不是装饰,它会直接改变模型看到的数据。尤其是裁剪、缩放和旋转,如果标注没有同步更新,训练数据会变脏。
我会同时检查原图、处理后图和标签。只看图片变换成功还不够,标注是否跟着变才是关键。
在前一篇中,我们讨论了图像的表示与存储,了解了如何用不同的数据结构来存储图像信息。本篇将深入介绍基本的图像处理技术,这些技术是进行更高级图像分析和计算机视觉任务的基础。我们将探讨图像的基本操作,包括图像的缩放、旋转、翻转以及裁剪等。
1. 图像处理基本操作
1.1 缩放
学习基本图像处理技术时,先问目标是增强可视效果、减少噪声、突出边缘还是准备特征。
图像缩放是一种基本操作,用于调整图像的大小。可以将图像放大或缩小,以适应需求。在Python中,使用OpenCV库可以很方便地实现这一功能。
示例代码:
import cv2
# 读取原始图像
image = cv2.imread('image.jpg')
# 缩放图像到200x200
resized_image = cv2.resize(image, (200, 200))
# 显示结果
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在上述代码中,我们使用cv2.resize()函数对图像进行缩放。需要注意的是,缩放可能会导致图像失真,尤其是在放大的情况下。
1.2 旋转
图像的旋转也是一种常见处理,可以用来调整图像的方向。我们可以指定旋转角度以及旋转中心。
示例代码:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 获取图像的中心
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
# 旋转矩阵
M = cv2.getRotationMatrix2D(center, 45, 1.0) # 旋转45度,缩放因子为1
# 进行旋转
rotated_image = cv2.warpAffine(image, M, (w, h))
# 显示结果
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个例子中,我们使用cv2.getRotationMatrix2D()生成旋转矩阵,并通过cv2.warpAffine()应用这个旋转。结果图像相对于原图是顺时针旋转了45度。
1.3 翻转
图像翻转通常用于镜像效果,可以分为水平翻转和垂直翻转。
示例代码:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 水平翻转
flipped_image_horizontal = cv2.flip(image, 1)
# 垂直翻转
flipped_image_vertical = cv2.flip(image, 0)
# 显示结果
cv2.imshow('Flipped Horizontal', flipped_image_horizontal)
cv2.imshow('Flipped Vertical', flipped_image_vertical)
cv2.waitKey(0)
cv2.destroyAllWindows()
这里使用cv2.flip()函数进行翻转,参数1表示水平翻转,参数0表示垂直翻转。
1.4 裁剪
裁剪是从图像中提取特定区域,通常用于去除不必要的部分或聚焦于图像的某个特征。
示例代码:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 裁剪区域,这里是从坐标(50, 50)开始,宽和高各为100的区域
cropped_image = image[50:150, 50:150]
# 显示结果
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个示例中,我们通过指定图像的切片来实现裁剪,image[y_start:y_end, x_start:x_end]格式明确了裁剪区域。
2. 应用案例
通过结合以上基本操作,我们可以实现更复杂的图像处理任务,例如图像的预处理。以下是一个简单的图像处理流水线,结合了缩放、裁剪和旋转。
读《图像处理基础之基本图像处理技术》时,可以把配图当成路线卡:先看整体顺序,再看每一步为什么这样做,最后再检查边界条件。
综合示例代码:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 缩放到500x500
resized_image = cv2.resize(image, (500, 500))
# 裁剪中心区域
(h, w) = resized_image.shape[:2]
center_cropped_image = resized_image[(h//4):(3*h//4), (w//4):(3*w//4)]
# 旋转30度
(center_x, center_y) = center_cropped_image.shape[1] // 2, center_cropped_image.shape[0] // 2
M = cv2.getRotationMatrix2D((center_x, center_y), 30, 1.0)
final_image = cv2.warpAffine(center_cropped_image, M, (center_cropped_image.shape[1], center_cropped_image.shape[0]))
# 显示结果
cv2.imshow('Final Processed Image', final_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个案例中,我们从原始图像开始,首先进行缩放,然后裁剪出图像中心的区域,最后旋转该区域,形成一个全新的效果。这是图像处理的一个典型应用流程,可以作为后续更复杂处理的基础。
复习《图像处理基础之基本图像处理技术》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。
练习《图像处理基础之基本图像处理技术》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。
3. 总结
本篇中,我们介绍了图像处理的一些基本技术,包括缩放、旋转、翻转和裁剪。这些基本操作是图像预处理的基础,为后续更复杂的操作(如颜色空间转换与直方图均衡)做好准备。通过熟练掌握这些基础技术,可以更有效地处理和分析图像,为深入学习计算机视觉奠定良好的基础。
在下一篇中,我们将探讨更高级的话题:颜色空间转换与直方图均衡,进一步了解图像的颜色特性以及如何通过直方图均衡来改善图像质量。期待与您一起深入探索!
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
图像处理基础之基本图像处理技术适合谁读?
这是 计算机视觉网络教程 系列第 5 / 31 篇,适合正在学习计算机视觉网络教程,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇计算机视觉网络教程要多久?
按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读