【发布时间】:2021-08-05 11:14:09
【问题描述】:
我正在拼接多张图像以获得正射镶嵌图。我正在使用 SURF,BF 匹配器。检测和匹配的部分拼接代码如下:
detector = cv2.xfeatures2d.SURF_create(400)
gray1 = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY)
ret1, mask1 = cv2.threshold(gray1,1,255,cv2.THRESH_BINARY)
kp1, descriptors1 = detector.detectAndCompute(gray1,mask1)
gray2 = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY)
ret2, mask2 = cv2.threshold(gray2,1,255,cv2.THRESH_BINARY)
kp2, descriptors2 = detector.detectAndCompute(gray2,mask2)
keypoints1Im = cv2.drawKeypoints(image1, kp1, outImage = cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(0,0,255))
# util.display("KEYPOINTS",keypoints1Im)
keypoints2Im = cv2.drawKeypoints(image2, kp2, outImage = cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(0,0,255))
# util.display("KEYPOINTS",keypoints2Im)
matcher = cv2.BFMatcher()
matches = matcher.knnMatch(descriptors2,descriptors1, k=2)
good = []
for m, n in matches:
if m.distance < 0.55 * n.distance:
good.append(m)
print (str(len(good)) + " Matches were Found")
if len(good) <= 10:
return image1
matches = copy.copy(good)
matchDrawing = util.drawMatches(gray2,kp2,gray1,kp1,matches)
在某些时候,我得到匹配 4 或更少。根据代码返回图像。
if len(good) <= 10:
return image1
因此,图像在这段时间内没有被缝合,结果与预期不符。
在这段代码之后,是拼接图像的单应性计算和图像包装。以上我只关注问题部分。
知道如果匹配少于 10 个我们还能做些什么来拼接图像吗?
【问题讨论】:
标签: python opencv image-processing computer-vision image-stitching