opencv-24 图像几何变换03-仿射-cv2.warpAffine()

文章介绍了仿射变换的概念,它在图像处理中用于保持直线和平行性。OpenCV的cv2.warpAffine函数通过2x3的变换矩阵实现图像的平移、旋转等仿射变换。文中提供了具体的代码示例,展示了如何使用此函数进行图像的平移和旋转操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是仿射?

仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够
保持图像的平直性和平行性。平直性是指图像经过仿射变换后,直线仍然是直线;平行性是指 图像在完成仿射变换后,平行线仍然是平行线。

OpenCV 中的仿射函数为 cv2.warpAffine(),其通过一个变换矩阵(映射矩阵)M 实现变换,
具体为:
dst(𝑥, 𝑦) = src(𝑀11𝑥 + 𝑀12𝑦 + 𝑀13, 𝑀21𝑥 + 𝑀22𝑦 + 𝑀23)
如图 5-2 所示,可以通过一个变换矩阵 M,将原始图像 O 变换为仿射图像 R

在这里插入图片描述
因此,可以采用仿射函数 cv2.warpAffine()实现对图像的旋转,该函数的语法格式如下:

dst = cv2.warpAffine( src, M, dsize[, flags[, borderMode[, borderValue]]] )

式中:
dst 代表仿射后的输出图像,该图像的类型和原始图像的类型相同。

dsize 决定输出图像的实际大小。

src 代表要仿射的原始图像。

M 代表一个 2×3 的变换矩阵。使用不同的变换矩阵ÿ

`cv2.warpAffine` 是 OpenCV(Open Source Computer Vision Library)中的一个函数,用于根据给定的仿射变换矩阵对图像进行扭曲或平移。这个函数通常用来实现图像的缩放、旋转、倾斜等操作。 在 Python 中,你可以这样做: ```python import cv2 import numpy as np # 加载原始图像 image = cv2.imread('input_image.jpg') # 定义仿射变换矩阵(例如,假设我们想水平翻转图像) # 如果要平移,可以设置为 (dx, dy, 0),其中 dx 和 dy 是像素偏移量 # 对于旋转和平滑缩放,你需要创建更复杂的矩阵 transform_matrix = np.array([[1, 0, 10], [0, 1, 5]]) # 使用 warpAffine 函数 warped_image = cv2.warpAffine(image, transform_matrix, (image.shape[1], image.shape[0])) # 显示原图和处理后的图像 cv2.imshow('Original Image', image) cv2.imshow('Warped Image', warped_image) # 等待用户按键,然后关闭所有窗口 cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,`transform_matrix` 参数定义了图像应该如何变形,`(image.shape[1], image.shape[0])` 表示输出图像的尺寸应与原图相同。`cv2.imshow()` 函数用于显示图像,`cv2.waitKey(0)` 让程序暂停直到用户按下任意键,`cv2.destroyAllWindows()` 则关闭所有打开的图像窗口。 如果你想要了解如何定义具体的仿射变换矩阵,可以告诉我你想达到的具体效果,我可以进一步说明。此外,还有其他参数如 `flags` 和 `borderMode` 可以控制边界处理方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海聊智造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值