『youcans 的 OpenCV 例程200篇 - 总目录』
【youcans 的 OpenCV 例程200篇】34. 图像的投影变换
投影变换(Projective mapping)也称透视变换(Perspective transformation)是建立两平面场之间的对应关系, 将图片投影到一个新的视平面(Viewing plane)。
OpenCV 提供了 cv2.warpPerspective 函数实现投影变换的操作。
函数说明:
cv2.getPerspectiveTransform(src, dst[,solveMethod]) → MP
cv2.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
函数cv2.getPerspectiveTransform 根据图像中不共线的 4 个点在变换前后的对应位置求得 (3x3) 变换矩阵,cv2.warpPerspective 使用该 (3x3) 变换矩阵即可求出变换后的图像。标量进行加法运算。
参数说明:
- src:变换前图像四边形顶点坐标
- dst:变换后图像四边形顶点坐标
- solveMethod:矩阵分解方法,传递给 cv2.solve 求解变换矩阵 MP
- cv2.DECOMP_LU:选择最优轴的高斯消去法,默认方法
- cv2.DECOMP_SVD:奇异值分解(SVD)方法
- cv2.DECOMP_EIG:特征值分解方法,src 必须对称
- cv2.DECOMP_QR:QR(正交三角)分解
- cv2.DECOMP_CHOLESKY:Cholesky LLT 分解
- MP:透视变换矩阵,3行3列
- dsize: 输出图像的大小,二元元组 (width, height)
- dst:变换操作的输出图像,可选项
- flags:插值方法,整型(int),可选项
- cv2.INTER_LINEAR:线性插值,默认选项
- cv2.INTER_NEAREST:最近邻插值
- cv2.INTER_AREA:区域插值
- cv2.INTER_CUBIC:三次样条插值
- cv2.INTER_LANCZOS4:Lanczos 插值
- borderMode:边界像素方法,整型(int),可选项,默认值为 cv2.BORDER_REFLECT
- borderValue:边界填充模式,可选项,默认值为 0(黑色填充)
- 返回值:dst,透视变换操作的输出图像,ndarray 多维数组
基本例程:1.43 图像的投影变换
# 1.43 投影变换 (Projective mapping)
img = cv2.imread("../images/imgB2.jpg") # 读取彩色图像(BGR)
h, w = img.shape[:2] # 图片的高度和宽度
pointSrc = np.float32([[0,0], [w-1,0], [0,h-100], [w-1, h-100]]) # 原始图像中 4点坐标
pointDst = np.float32([[180,50], [w-180,50], [0,h-100], [w-1, h-100]]) # 变换图像中 4点坐标
MP = cv2.getPerspectiveTransform(pointSrc, pointDst) # 计算投影变换矩阵 M
imgP = cv2.warpPerspective(img, MP, (512, 512)) # 用变换矩阵 M 进行投影变换
plt.figure(figsize=(9,6))
plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title("Original")
plt.subplot(122), plt.imshow(cv2.cvtColor(imgP, cv2.COLOR_BGR2RGB)), plt.title("Projective")
plt.show()
(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18
【第3章:图像的几何变换】