CV2添加2个不带透明度的图像

2024-09-26 17:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个图像处理项目。我有2个RGB图像,我想通过重叠2个输入图像来创建一个新图像

这是我的2个输入图像:

Crackenter image description here

我使用cv2“添加”方法来实现这一点。但结果并不是希望的结果

结果如下:

enter image description here

我不想在我的红色条纹上有透明的图案。我想要一些不透明的东西,它覆盖了图片1上的裂缝

这是我的代码:

img1 = cv2.imread(r"C:\Users\francois.bock\Desktop\crack.jpg")
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)

img2 = cv2.imread(r"C:\Users\francois.bock\Desktop\line.png")
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)

# Adding two images
add = cv2.add(img1, img2)

#Display the image
img = PImage.fromarray(add)
img.show()

我还天真地尝试添加如下两幅图像:

add = img1 + img2
add = add.astype(np.uint8)

但结果更为奇怪

我还使用了cv2“addWeighted”方法,但它也提供了一个透明条带

所以我的问题是,有没有一个简单的方法来添加两个没有透明度的图像?先谢谢你


Tags: 方法图像addimgcv2userscolorimg1
1条回答
网友
1楼 · 发布于 2024-09-26 17:59:06

您可以使用直线Numpy进行此操作:

import numpy as np
import cv2

a = cv2.imread('a.jpg')
b = cv2.imread('b.png') 

# Make "a" red anywhere b>0
a[ np.any(b>0,axis=-1) ] = [0,0,255] 

enter image description here

如果您的图像中有蓝色和绿色或任何其他颜色线,您可以使用以下方法:

# Anywhere image "b" is not black, use image "b", else use image "a"
result = np.where(np.any(b>0,axis=-1,keepdims=True), b, a)   

enter image description here

相关问题 更多 >

    热门问题