代码之家  ›  专栏  ›  技术社区  ›  Bill Bridge

在opencv-numpy-python中转换颜色时丢失消除混叠

  •  1
  • Bill Bridge  · 技术社区  · 8 年前

    我想转换图像中的颜色,从而保留抗锯齿和透明背景。 初始图像是具有透明背景的PNG:。

    我使用以下代码将箭头从红色转换为绿色:

    导入numpy as np 导入CV2 image=cv2.imread(“c:/temp/arr.png”)。 image=cv2.cvt颜色(image,cv2.color_bgr2bgra) cv2.imwrite('c:/temp/source.png',图像) image[np.其中((image=[0,0255255])。all(axis=2))]=[0255,0255] image=cv2.cvt颜色(image,cv2.color_bgr2rgba) image[np.all(image=[255,255,255,255],axis=2]=[255,255,255,0] cv2.imwrite('c:/temp/target.png',图像) < /代码>

    但箭头尖端的对角线变得非常细小:

    我该如何改进这种颜色转换?

    enter image description here

    我使用以下代码将箭头从红色转换为绿色:

    import numpy as np
    import cv2
    
    image = cv2.imread("C:/Temp/arr.png")
    image = cv2.cvtColor(image, cv2.COLOR_BGR2BGRA)
    cv2.imwrite('C:/Temp/source.png', image)
    
    image[np.where((image == [0,0,255,255]).all(axis = 2))] = [0,255,0,255]
    
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGBA)
    image[np.all(image == [255, 255, 255, 255], axis=2)] = [255, 255, 255, 0]
    cv2.imwrite('C:/Temp/target.png', image)
    

    但箭头尖端的对角线变得非常细小:

    enter image description here

    我该如何改进这种颜色转换?

    1 回复  |  直到 8 年前
        1
  •  1
  •   hkchengrex    8 年前
    imread

    enter image description here

    import numpy as np
    import cv2
    
    image = cv2.imread("arr.png", cv2.IMREAD_UNCHANGED)
    b, g, r, a = cv2.split(image)
    
    bgr = cv2.merge((b, g, r))
    
    all_g = np.ones_like(bgr)
    all_g[:, :] = (0,255,0)
    
    bgr = np.where(bgr == (0,0,255), all_g, bgr)
    
    image = cv2.merge((bgr, a))
    
    cv2.imwrite('target.png', image)