srcImg = cv.copyMakeBorder(img1, top, bot, left, right, cv.BORDER_CONSTANT, value=(0, 0, 0)) testImg = cv.copyMakeBorder(img2, top, bot, left, right, cv.BORDER_CONSTANT, value=(0, 0, 0)) img1gray = cv.cvtColor(srcImg, cv.COLOR_BGR2GRAY) img2gray = cv.cvtColor(testImg, cv.COLOR_BGR2GRAY) sift = cv.xfeatures2d.SIFT_create() height = srcImg.shape[0] width = srcImg.shape[1] if len(good) > MIN_MATCH_COUNT: src_pts = np.float32([ kp1[m.queryIdx].pt for m in good ]).reshape(-1,1,2) dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good ]).reshape(-1,1,2) M, mask = cv.findHomography(src_pts, dst_pts, cv.RANSAC, 5.0) warpImg = cv.warpPerspective(testImg, M, (testImg.shape[1], testImg.shape[0]), flags=cv.WARP_INVERSE_MAP) # 查找左边界 left = next((col for col in range(width) if srcImg[:, col].any() and warpImg[:, col].any()), None) # 查找右边界 right = next((col for col in range(width-1, -1, -1) if srcImg[:, col].any() and warpImg[:, col].any()), None) res = np.zeros([height, width, 3], np.uint8) for row in range(0, height): for col in range(0, width): if not srcImg[row, col].any(): res[row, col] = warpImg[row, col] elif not warpImg[row, col].any(): res[row, col] = srcImg[row, col] else: srcImgLen = float(abs(col - left)) testImgLen = float(abs(col - right)) alpha = srcImgLen / (srcImgLen + testImgLen) res[row, col] = np.clip(srcImg[row, col] * (1-alpha) + warpImg[row, col] * alpha, 0, 255) 中的srcImg和testImg究竟是什么
时间: 2023-06-17 17:05:26 浏览: 83
在这段代码中,srcImg和testImg分别是img1和img2经过边界扩展后的图像。通过使用cv.copyMakeBorder函数,我们可以将原始图像的边界扩展一定的像素数,从而避免在后续的处理中出现边界不足的问题。这里采用的是cv.BORDER_CONSTANT模式,表示在边界处填充固定的像素值。在这里,我们填充的是黑色。