【问题标题】:CV2 add 2 images without transparency PythonCV2添加2个没有透明度的图像Python
【发布时间】:2020-03-13 20:03:26
【问题描述】:

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

这是我的 2 张输入图像:

我正在使用 cv2 "add" 方法来实现这一点。但结果并不是希望的结果……

结果如下:

我不想让我的红色条纹透明。我想要一些不透明的东西,它可以覆盖图像 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 张不透明的图像?提前谢谢你。

【问题讨论】:

    标签: python image-processing cv2


    【解决方案1】:

    你可以用直接的 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)   
    

    【讨论】:

    • 感谢您的回答。它正在工作,但在某些情况下,我在同一张图像上有一条蓝色和一条红色条纹。所以我认为 Numpy 不适合这种情况
    • 啊哈!问题中代表图像的价值 :-) 我正在更新我的答案...
    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 2011-04-18
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2018-10-11
    • 2013-12-08
    相关资源
    最近更新 更多