『youcans 的 OpenCV 例程200篇 - 总目录』
【youcans 的 OpenCV 例程200篇】35. 图像的投影变换(边界填充)
投影变换(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
-
MP:透视变换矩阵,3行3列
-
dsize: 输出图像的大小,二元元组 (width, height)
-
dst:变换操作的输出图像,可选项
-
flags:插值方法,整型(int),可选项
-
borderMode:边界像素方法,整型(int),可选项,默认值为 cv2.BORDER_REFLECT
-
borderValue:边界填充模式,可选项,默认值为 0(黑色填充)
- cv2.BORDER_REPLICATE:复制,复制最边缘像素进行填充(aa | abcdefg | gg),中值滤波采用复制法
- cv2.BORDER_REFLECT:对称法,以图像边缘为轴进行对称填充(cba| abcdefg | gfe)
- cv2.BORDER_REFLECTT_101:倒映法,以图像最边缘像素为轴进行对称填充(dcb| abcdefg | fed)
- cv2.BORDER_WRAP:用另一侧元素来填充这一侧的扩充边界(efg| abcdefg | ab)
- cv2.BORDER_CONSTANT:以常量像素值(value)填充扩充的边界(VV | abcdefg | VV)
-
返回值:dst,透视变换操作的输出图像,ndarray 多维数组
例程:1.44 图像的投影变换
# 1.44 图像的投影变换img = cv2.imread("../images/imgC2.jpg") # 读取彩色图像(BGR)h, w = img.shape[:2] # 图片的高度和宽度pointSrc = np.float32([[0,0], [w,0], [0,h], [w,h]]) # 原始图像中 4点坐标pointDst = np.float32([[int(w/3), int(h/3)], [int(w*2/3), int(h/3)], [0,h], [w,h]]) # 变换图像中 4点坐标MP = cv2.getPerspectiveTransform(pointSrc, pointDst) # 计算投影变换矩阵 MimgP = cv2.warpPerspective(img, MP, (w,h), flags=cv2.INTER_AREA, borderMode=cv2.BORDER_WRAP)plt.figure(figsize=(9,6))plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title("Original"), plt.axis('off')plt.subplot(122), plt.imshow(cv2.cvtColor(imgP, cv2.COLOR_BGR2RGB)), plt.title("Projective"), plt.axis('off')plt.show()
(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18
【第3章:图像的几何变换】
33. 图像的复合变换
34. 图像的投影变换
35. 图像的投影变换(边界填充)