您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# cv2.warpAffine参数详解
## 概述
`cv2.warpAffine` 是OpenCV中用于执行仿射变换的核心函数,广泛应用于图像旋转、缩放、平移等几何变换场景。本文将深入解析该函数的参数含义、使用方法和实际应用技巧。
## 函数原型
```python
cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]) → dst
[[a, b, c],
[d, e, f]]
x' = a*x + b*y + c
y' = d*x + e*y + f
cv2.getRotationMatrix2D
:生成旋转矩阵cv2.getAffineTransform
:通过三点映射生成矩阵cv2.INTER_LINEAR
:双线性插值(默认)cv2.INTER_NEAREST
:最近邻插值cv2.INTER_CUBIC
:双三次插值cv2.INTER_AREA
:区域插值(适合缩小)cv2.WARP_INVERSE_MAP
组合使用表示逆变换cv2.BORDER_CONSTANT
:填充固定值cv2.BORDER_REPLICATE
:复制边缘像素cv2.BORDER_REFLECT
:镜像反射cv2.BORDER_CONSTANT
import cv2
import numpy as np
img = cv2.imread('input.jpg')
rows, cols = img.shape[:2]
# 构造平移矩阵(x方向平移100,y方向平移50)
M = np.float32([[1, 0, 100], [0, 1, 50]])
dst = cv2.warpAffine(img, M, (cols, rows))
# 获取旋转矩阵(中心点旋转30度,缩放0.8倍)
M = cv2.getRotationMatrix2D((cols/2, rows/2), 30, 0.8)
dst = cv2.warpAffine(img, M, (cols, rows))
# 定义三个原始点和目标点
pts1 = np.float32([[50,50], [200,50], [50,200]])
pts2 = np.float32([[10,100], [200,50], [100,250]])
M = cv2.getAffineTransform(pts1, pts2)
dst = cv2.warpAffine(img, M, (cols, rows))
Q:如何保持图像旋转后不被裁剪? A:需要重新计算输出尺寸:
def rotate_image(image, angle):
h, w = image.shape[:2]
M = cv2.getRotationMatrix2D((w/2,h/2), angle, 1)
cos = np.abs(M[0,0])
sin = np.abs(M[0,1])
new_w = int((h * sin) + (w * cos))
new_h = int((h * cos) + (w * sin))
M[0,2] += (new_w - w) / 2
M[1,2] += (new_h - h) / 2
return cv2.warpAffine(image, M, (new_w, new_h))
Q:如何处理多通道图像? A:warpAffine会自动处理所有通道,无需特殊操作
cv2.warpAffine是OpenCV几何变换的核心工具,掌握其参数配置对于实现复杂的图像处理流程至关重要。通过合理组合变换矩阵和插值方法,可以实现各种高质量的图像变换效果。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。