如何用Python OpenCV将image1透视变换后叠加到image2?叠加后无法显示image1
透视变换后图像叠加问题的解决方案
问题根源
cv2.warpPerspective生成的变换后图像Affinedst中,原图像范围外的区域会被填充为黑色(像素值0)。你用cv2.addWeighted(img2,1,Affinedst,1,0)叠加时,黑色区域与img2相加后仍保留img2的像素;而有效区域因两者权重均为1,像素值相加后溢出截断(如255+255=510→255),最终导致完全看不到img1。
修复方案
步骤1:生成透视变换掩码
先创建与img1尺寸一致的全白掩码,对其执行相同的透视变换,得到仅保留img1有效变换区域的掩码:
mask = np.ones_like(img1) * 255 mask = cv2.warpPerspective(mask, M, (cols, rows))
步骤2:仅在有效区域叠加
保持img2权重为1,通过掩码限定叠加范围,同时调整img1的权重(避免像素溢出):
added_image = img2.copy() # 提取掩码非黑区域 roi = mask > 0 # 加权叠加,img1权重可根据视觉效果调整(示例为0.3) added_image[roi] = cv2.addWeighted(img2[roi], 1, Affinedst[roi], 0.3, 0)
如果需要让img1完全覆盖对应区域(而非加权融合),可直接替换像素:
added_image[roi] = Affinedst[roi]
额外检查项
- 确认
src_interest_pts与Affine_interest_pts的坐标顺序一致(均为顺时针/逆时针),否则透视变换会出现错位。 - 确保
cols和rows与img2的尺寸完全匹配,避免因尺寸不匹配导致叠加失败。
内容的提问来源于stack exchange,提问作者Marina Parshina
相关产品推荐
相关产品推荐

