我有两个想要使用openCV对齐的图像。其中一个图像是真彩色图像的绿色条带,另一个是几乎相同区域的近红外图像(偏移约为180像素)。对于这种对齐,我想使用python-opencv 3.0和ORB算法。我使用以下脚本来创建KNNmatches:
img1 = cv2.imread('rgb.png',1)
img2 = cv2.imread('nir.png',0)
img1=img1[:,:,1]
orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)
good = []
for m,n in matches:
if m.distance < 0.75*n.distance:
good.append([m])
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,flags=2,outImg=None)
但是,当我使用我的图片时,我只会使用以下图片进行一些匹配:
你们中的任何人都知道如何最好地对齐这些图像吗?如果这是在错误的论坛上发布的,请提前感谢并道歉。
答案 0 :(得分:1)
下一步是从你的&#34;好匹配&#34;中提取关键点位置,用这些来计算一个3x3变换矩阵,将一个图像的角转换为另一个。
对于这种情况,假设我们想要将img2转换为与img1对齐。首先,我们提取好匹配的位置:
pts1 = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
pts2 = np.float32([kp2[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
然后我们找到转换矩阵:
M = cv2.findHomography(pts2, pts1)
最后,我们可以应用转换:
warpedImg2 = cv2.warpPerspective(img2, M, img1.shape)
以下是使用Python在OpenCV中进行特征检测的great resource。