嘿,小伙伴们!今天我们要聊的是计算机视觉中的2D变换——那些能让图像‘动’起来的技术。无论你是初学者还是资深开发者,这篇文章都将带你深入了解2D变换,并通过Python代码实战演示。准备好了吗?让我们开始吧!🌟
📊 什么是2D变换?
在计算机视觉中,2D变换是指对图像进行平移、旋转、缩放、剪切等操作的过程。通过这些变换,我们可以改变图像的位置、大小和方向,以达到不同的视觉效果或处理需求。
🧪 实战案例:用Python进行2D变换
假设我们有一张图片,我们想要在这张图片上应用几种常见的2D变换,比如旋转和平移,来看看Python是如何做到这一点的。我们将使用OpenCV库来完成这项任务。
🛠️ 准备工作
首先,确保你已经安装了OpenCV库。如果没有安装,可以通过pip安装:
pip install opencv-python
📖 代码实战
-
加载图片
我们先加载一张图片,并创建一个副本以便进行变换。
import cv2 import numpy as np # 加载图片 img = cv2.imread('example.jpg') img_copy = img.copy()
-
旋转图片
- 定义旋转角度:我们将图片逆时针旋转45度。
angle = 45 * np.pi / 180 # 将角度转换为弧度 height, width = img.shape[:2] rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), angle * 180 / np.pi, 1) # 应用旋转 rotated_img = cv2.warpAffine(img_copy, rotation_matrix, (width, height))
-
平移图片
- 定义平移距离:我们将图片向右平移100像素,向下平移50像素。
translation_matrix = np.float32([[1, 0, 100], [0, 1, 50]]) # 应用平移 translated_img = cv2.warpAffine(img_copy, translation_matrix, (width, height))
-
缩放图片
- 定义缩放因子:我们将图片放大两倍。
scale_factor = 2.0 scaled_img = cv2.resize(img_copy, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_LINEAR)
-
剪切图片
- 定义剪切矩阵:我们将图片沿水平方向剪切10%。
shear_matrix = np.float32([[1, 0.1, 0], [0, 1, 0]]) # 应用剪切 sheared_img = cv2.warpAffine(img_copy, shear_matrix, (width, height))
-
显示结果
显示我们变换后的结果,并保存图片。
# 显示图像 cv2.imshow('Original Image', img) cv2.imshow('Rotated Image', rotated_img) cv2.imshow('Translated Image', translated_img) cv2.imshow('Scaled Image', scaled_img) cv2.imshow('Sheared Image', sheared_img) cv2.waitKey(0) cv2.destroyAllWindows() # 保存图像 cv2.imwrite('rotated.jpg', rotated_img) cv2.imwrite('translated.jpg', translated_img) cv2.imwrite('scaled.jpg', scaled_img) cv2.imwrite('sheared.jpg', sheared_img)
🎨 代码解析
-
加载图片:
- 使用
cv2.imread
读取图片。 - 创建一个副本以便进行变换。
- 使用
-
旋转图片:
- 使用
cv2.getRotationMatrix2D
获取旋转矩阵。 - 使用
cv2.warpAffine
应用旋转变换。
- 使用
-
平移图片:
- 定义平移矩阵。
- 使用
cv2.warpAffine
应用平移变换。
-
缩放图片:
- 使用
cv2.resize
进行缩放变换。
- 使用
-
剪切图片:
- 定义剪切矩阵。
- 使用
cv2.warpAffine
应用剪切变换。
-
显示和保存:
- 使用
cv2.imshow
显示变换后的图像。 - 使用
cv2.imwrite
保存变换后的图像。
- 使用
🎨 显示效果
🚀 结语
通过今天的实战演练,大家已经学会了如何使用Python和OpenCV来实现常见的2D变换。这些简单的变换是构建复杂图像处理任务的基础,掌握了它们,你就迈出了计算机视觉应用的第一步!如果你有任何问题或想法,欢迎在评论区留言交流。我们下次再见!喜欢我的文章请关注,点赞和收藏👋