import numpy as np import cv2 as cv import matplotlib.pyplot as plt img1 = cv.imread('D:/junzhi/3-7000-10k.png', ) img2 = cv.imread('D:/junzhi/3-7000-10y.png', ) 初始化 AKAZE 探测器 akaze = cv.AKAZE_create() 使用 SIFT 查找关键点和描述 kp1, des1 = akaze.detectAndCompute(img1, None) kp2, des2 = akaze.detectAndCompute(img2, None) BFMatcher 默认参数 bf = cv.BFMatcher() matches = bf.knnMatch(des1, des2, k=2) 旋转测试 good_matches = [] for m,n in matches: if m.distance < 0.75*n.distance: good_matches.append([m]) 画匹配点 img3 = cv.drawMatchesKnn(img1,kp1,img2,kp2,good_matches,None,flags=cv.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) #cv.imwrite('matches.png', img3) 选择匹配关键点 ref_matched_kpts = np.float32([kp1[m[0].queryIdx].pt for m in good_matches]).reshape(-1,1,2) sensed_matched_kpts = np.float32([kp2[m[0].trainIdx].pt for m in good_matches]).reshape(-1,1,2) 计算 homography H, status = cv.findHomography(ref_matched_kpts, sensed_matched_kpts, cv.RANSAC,1.0) 变换 warped_image = cv.warpPerspective( img2, H, (img2.shape[1], img2.shape[0])) cv.imwrite('warped.png', warped_image)改进这个程序使输入图像16位,输出图像也为16位
时间: 2024-04-12 18:29:11 浏览: 121
要将输入图像和输出图像都设置为16位,你可以按照以下方式修改程序:
1. 加载图像时,使用参数 `cv.IMREAD_ANYDEPTH` 将图像以原始位深度加载:
```python
img1 = cv.imread('D:/junzhi/3-7000-10k.png', cv.IMREAD_ANYDEPTH)
img2 = cv.imread('D:/junzhi/3-7000-10y.png', cv.IMREAD_ANYDEPTH)
```
2. 在保存变换后的图像时,将位深度转换为16位:
```python
warped_image = cv.warpPerspective(img2, H, (img2.shape[1], img2.shape[0]))
warped_image = (warped_image / 255).astype(np.uint16) * 65535
cv.imwrite('warped.png', warped_image)
```
这样,输入图像和输出图像都将以16位的位深度进行处理和保存。请注意,这里假设输入图像是在0-65535的范围内,如果不是这个范围,你可能需要根据实际情况进行调整。
阅读全文