cv2.findHomography() 是 OpenCV 中的一个函数,用于找到两个图像之间的单应性矩阵(Homography matrix)。在计算机视觉中,单应性矩阵是一个3x3的矩阵,它描述了两个平面之间的相对位置关系,通常用于图像配准、图像拼接、全景图像生成等应用中。
## findHomography(srcPoints,dstPoints, method=None, ransacReprojThreshold=None, mask=NO
#计算视角变换矩阵,透视变换函数,与cv2.getPerspectiveTransform()的区别在与可多个数据点变换
#参数srcPoints:图片B的匹配点坐标
#参数dstPoints:图片A3的匹配点坐标
# 参数method:计算变换矩阵的方法。
# 0- 使用所有的点,最小二乘
# RANSAC-基于随机样本一致性,见https://zhuanlan.zhihu.com/p/402727549
# LMEDS - 最小中值
# RHO-基于渐近样本一致性
# ransacReprojThreshold:最大允许重投影错误阈值。该参数只有在method参数为RANSAC与RHO的时启用,默认
# #返回值:中H为变换矩阵,mask是掩模标志
cv2.findHomography(srcPoints, dstPoints, method=cv2.RANSAC, ransacReprojThreshold=3, mask=None, maxIters=2000, confidence=0.995)
以下是一个使用 cv2.findHomography() 的示例,演示如何计算和应用单映射矩阵:
import cv2
import numpy as np
# 定义源图像和目标图像中的对应点
src_points = np.array([[100, 100], [200, 100], [200, 200], [100, 200]], dtype=np.float32)
dst_points = np.array([[150, 150], [250, 150], [250, 250], [150, 250]], dtype=np.float32)
# 计算单映射矩阵
H, mask = cv2.findHomography(src_points, dst_points, cv2.RANSAC, 5.0)
# 应用单映射矩阵进行透视变换
img = cv2.imread('source.jpg')
height, width = img.shape[:2]
warped_img = cv2.warpPerspective(img, H, (width, height))
# 显示结果
cv2.imshow('Warped Image', warped_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
定义源点和目标点
:在源图像和目标图像中定义四组对应的点。计算单映射矩阵
:使用 cv2.findHomography() 计算单映射矩阵 H。应用透视变换
:使用 cv2.warpPerspective() 函数和计算出的单映射矩阵 H 对源图像进行透视变换,从而将源图像中的对应点映射到目标图像中的位置。显示结果
:使用 OpenCV 的显示函数 cv2.imshow() 显示变换后的图像。cv2.findHomography() 函数在图像处理和计算机视觉中具有广泛的应用,特别是在图像拼接、运动估计和增强现实等领域。
cv2.warpPerspective() 是 OpenCV 库中的一个函数,用于对图像进行透视变换
。透视变换是指在图像的二维平面上进行投影变换,从而改变图的视角,类似于将图像从一个视点转换到另一个视点。
cv2.warpPerspective(src, M, dsize, dst=None, flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT, borderValue=0)
以下是一个使用 cv2.warpPerspective() 进行透视变换的示例代码:
import cv2
import numpy as np
# 读取图像
image = cv2.imread('image.jpg')
# 定义源图像中的四个点
pts_src = np.array([[100, 100], [200, 100], [200, 200], [100, 200]])
# 定义目标图像中的四个点
pts_dst = np.array([[200, 150], [400, 150], [400, 300], [200, 300]])
# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(pts_src.astype(np.float32), pts_dst.astype(np.float32))
# 定义输出图像的大小
dsize = (500, 400)
# 进行透视变换
warped_image = cv2.warpPerspective(image, M, dsize)
# 显示结果
cv2.imshow('Warped Image', warped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个例子中,我们首先读取了一张图像,然后定义了源图像和目标图像中的四个点。
接着,我们使用 cv2.getPerspectiveTransform() 计算透视变换矩阵 M,并调用 cv2.warpPerspective() 进行变换。
最终,变换后的图像被显示出来。
透视变换在图像处理和计算机视觉中有广泛的应用,如图像校正、图像拼接和计算机视觉中的平面检测等。
xue