我最近参与了一个需要将多个图像混合在一起的项目。我成功地完成了所有必要的步骤并成功地混合了图像。但是,我注意到当我混合图像时,每张最终图像的边界上都会出现黑线,表明每张图像的放置位置。您可以在以下链接中看到带有这些伪像的最终图像示例:
即使快速浏览图像,这些伪影也很明显。
这是我混合图像的代码:
def normalize_piece(img):
return cv2.normalize(img.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)
def blend_pieces(piece1, piece2, transformation_matrix, width, height):
piece1_norm = normalize_piece(piece1)
piece2_norm = normalize_piece(piece2)
piece1_warped = cv2.warpPerspective(src=piece1_norm, M=transformation_matrix, dsize=(width, height))
black_rgb_pixel = np.zeros(3)
mask_left = np.all(piece1_warped != black_rgb_pixel, axis=-1)
mask_right = np.all(piece2_norm != black_rgb_pixel, axis=-1)
mask_overlap = mask_left & mask_right
mask_left_only = mask_left & ~mask_right
mask_right_only = mask_right & ~mask_left
piece1_warped[mask_left_only] = piece1_warped[mask_left_only]
piece1_warped[mask_right_only] = piece2_norm[mask_right_only]
piece1_warped[mask_overlap] = (piece1_warped[mask_overlap] + piece2_norm[mask_overlap]) / 2
return piece1_warped