OpenCV addweight 不绘制叠加层

OpenCV addweight does not draw an overlay

我正在尝试在图像顶部覆盖一个透明的红色矩形框,然后 return 整个过程来自一个函数。为此,我使用 cv2.addWeight()。我有一个以前的 PIL 矩形函数调用,它绘制一个矩形轮廓来标记输出应该去哪里,以防它不出现。然而,不幸的是,什么也没有画出来。这是我使用叠加功能时的输出:

这是我的代码:

def overlay(path, lg_x, lg_y):
    img = cv2.imread(path, cv2.IMREAD_UNCHANGED)

    overlay = cv2.rectangle(img, (0, 0), (lg_x, lg_y), (0, 0, 255), cv2.FILLED)

    result = cv2.addWeighted(img, 1, overlay, 0.5, 1)

    pil_image = Image.fromarray(np.uint8(result))

    return pil_image

尝试:

result = cv2.addWeighted(img, 0.5, overlay, 0.5, 0)

首先,我不得不说,我使用你的函数未能重现与你相同的错误。一定是哪里出了问题。我还有另一个错误:完全填充的矩形。

执行此操作的代码中存在问题:

overlay = cv2.rectangle(img, (0, 0), (lg_x, lg_y), (0, 0, 255), cv2.FILLED) 还在 img 上添加了一个矩形,因此无论您在 cv2.addWeighted 中放置什么权重,您的图像都将是完整的。

这是对我有用的代码:

def overlay(path, lg_x, lg_y):
    img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
    overlay = cv2.rectangle(img.copy(), (0, 0), (lg_x, lg_y), (0, 0, 255), cv2.FILLED)

    alpha = 0.2
    output = cv2.addWeighted(img, 1-alpha, overlay, alpha, 0)

    output = cv2.cvtColor(np.uint8(output), cv2.COLOR_BGR2RGB)
    pil_image = Image.fromarray(output)

    return pil_image

我在图像的副本上使用了 cv2.rectangle,并更改了应用权重的方式,以便总权重始终为 1.0(此处矩形的不透明度为 20%)。 Image.fromarray 不知怎么弄错了我的颜色,我想肯定还有其他问题,但因为这不是主要问题,所以我没有深入检查。