我正在尝试在图像顶部覆盖一个透明的红色矩形框并从函数返回整个内容。为此,我使用了 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
答案 0 :(得分:0)
试试:
result = cv2.addWeighted(img, 0.5, overlay, 0.5, 0)
答案 1 :(得分: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
以某种方式使我的颜色错误,我想一定是另一个问题,但由于这不是主要问题,我没有更深入地检查。