python两张图片各选取一个点对齐
时间: 2023-07-07 15:44:29 浏览: 52
要对两张图片中的两个点进行对齐,可以使用OpenCV库中的`cv2.findHomography`函数。以下是一个简单的示例代码:
```python
import cv2
import numpy as np
# 读取两张图片
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 在第一张图片上选择一个点
points1 = []
def select_point1(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
points1.append((x, y))
cv2.circle(img1, (x, y), 5, (0, 0, 255), -1)
cv2.imshow('image1', img1)
cv2.imshow('image1', img1)
cv2.setMouseCallback('image1', select_point1)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 在第二张图片上选择一个点
points2 = []
def select_point2(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
points2.append((x, y))
cv2.circle(img2, (x, y), 5, (0, 0, 255), -1)
cv2.imshow('image2', img2)
cv2.imshow('image2', img2)
cv2.setMouseCallback('image2', select_point2)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 对齐两个点
if len(points1) == 1 and len(points2) == 1:
src = np.float32([points1[0], points2[0]])
dst = np.float32([[0, 0], [img1.shape[1], 0]])
M, _ = cv2.findHomography(src, dst, cv2.RANSAC, 5.0)
aligned_img = cv2.warpPerspective(img2, M, (img1.shape[1], img1.shape[0]))
cv2.imshow('aligned', aligned_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先使用`cv2.imread`函数读取两张图片,然后分别在两张图片上选择一个点。当用户选择两个点时,我们使用`cv2.findHomography`函数计算单应矩阵,并使用`cv2.warpPerspective`函数对第二张图像进行透视变换,使两个点对齐。最后,我们使用`cv2.imshow`函数显示变换后的图像。