CV2 添加 2 张不透明的图像 Python
CV2 add 2 images without transparency Python
我正在从事图像处理项目。我有 2 个 RGB 图像,我想通过重叠 2 个输入图像来创建一个新图像。
这是我的 2 张输入图像:
我正在使用 cv2“添加”方法来实现这一点。但是结果并不是希望的结果...
结果如下:
我不想让我的红色条纹透明。我想要一些不透明的东西,它可以覆盖图像 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()
我也天真地尝试添加 2 张图像:
add = img1 + img2
add = add.astype(np.uint8)
但结果更奇怪
我也使用了cv2的“addWeighted”方法,但它也给出了透明条纹。
所以我的问题是,有没有一种简单的方法可以添加 2 张不透明的图像?提前谢谢你。
你可以直接用 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]
如果你的图片中也有蓝色和绿色或任何其他颜色的线条,你可以使用这个:
# 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)
我正在从事图像处理项目。我有 2 个 RGB 图像,我想通过重叠 2 个输入图像来创建一个新图像。
这是我的 2 张输入图像:
我正在使用 cv2“添加”方法来实现这一点。但是结果并不是希望的结果...
结果如下:
我不想让我的红色条纹透明。我想要一些不透明的东西,它可以覆盖图像 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()
我也天真地尝试添加 2 张图像:
add = img1 + img2
add = add.astype(np.uint8)
但结果更奇怪
我也使用了cv2的“addWeighted”方法,但它也给出了透明条纹。
所以我的问题是,有没有一种简单的方法可以添加 2 张不透明的图像?提前谢谢你。
你可以直接用 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]
如果你的图片中也有蓝色和绿色或任何其他颜色的线条,你可以使用这个:
# 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)