You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:22:42