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

如何使用Python OpenCV为绘制的线条添加透明效果

透明效果失效的原因

  • 未定义output变量:代码中调用cv2.addWeighted时用到的output变量没有提前初始化,部分运行环境下会直接报错,就算无报错也会因变量指向异常导致叠加逻辑失效。
  • 叠加逻辑位置错误:你把overlay = image.copy()和叠加操作放在了循环内部,每次循环都会用原始图复制新的overlay、仅绘制当前一根线再叠加,之前循环绘制的线条会被完全覆盖,最终只能看到最后一根线的叠加效果,甚至完全看不到透明效果。
  • 可选优化:当前设置的overlay权重为0.4,线条显示浓度较低,可根据需求自行调整参数。

修正后的代码

def draw_from_pitch_to_image(image, reverse_output_points):
    # 仅初始化一次overlay,避免循环重复复制
    overlay = image.copy()
    alpha = 0.4  # 数值越大线条越不透明,可自行调整
    for i in range(0, len(reverse_output_points), 2):
        x1, y1 = reverse_output_points[i]
        x2, y2 = reverse_output_points[i + 1]

        x1 = int(x1)
        y1 = int(y1)
        x2 = int(x2)
        y2 = int(y2)

        color = [255, 0, 0] if i < 1 else [0, 0, 255]
        # 所有线条统一绘制到同一个overlay上
        cv2.line(overlay, (x1, y1), (x2, y2), color, 2)
    # 所有线条绘制完成后,仅执行一次叠加
    cv2.addWeighted(overlay, alpha, image, 1 - alpha, 0, image)
    
    # 如果需要保留原始图像不被修改,可改用以下逻辑返回新图像:
    # output = image.copy()
    # cv2.addWeighted(overlay, alpha, output, 1 - alpha, 0, output)
    # return output

如果需要叠加不同透明度的多层线条,可以按透明度分组,相同透明度的线条绘制在同一个overlay上,分组完成后再依次叠加即可。

内容的提问来源于stack exchange,提问作者payam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:27:04