两张图像之间的颜色转换,其中一张图像为纯色

问题描述

我使用OpenCV遇到了这个特殊的颜色转移教程:

https://www.pyimagesearch.com/2014/06/30/super-fast-color-transfer-images/

并像这样实现它:

def color_transfer(source,target):
    # compute color statistics for the source and target images
    source = cv2.cvtColor(source,cv2.COLOR_BGR2LAB).astype("float32")
    target = cv2.cvtColor(target,cv2.COLOR_BGR2LAB).astype("float32")
    
    # compute color stats for both images
    (lMeanSrc,lStdSrc,aMeanSrc,aStdSrc,bMeanSrc,bStdSrc) = self.image_stats(source)
    (lMeanTar,lStdTar,aMeanTar,aStdTar,bMeanTar,bStdTar) = self.image_stats(target)
    
    # split the color space
    (l,a,b) = cv2.split(target)
    
    # substract the means from target image
    l -= lMeanTar
    a -= aMeanTar
    b -= bMeanTar
    
    # check values
    print(lStdSrc,bStdSrc)
    print(lStdTar,bStdTar)
    print(lMeanSrc,bMeanSrc)
    
    # process lab computation
    l = (lStdSrc / lStdTar) * l
    a = (aStdSrc / aStdTar) * a
    b = (bStdSrc / bStdTar) * b
    
    # add the source mean
    l += lMeanSrc
    a += aMeanSrc
    b += bMeanSrc
    
    # clipping the pixels between 0 and 255
    l = np.clip(l,255)
    a = np.clip(a,255)
    b = np.clip(b,255)
    
    # merge the channels
    transfer = cv2.merge([l,b])
    
    # converting back to BGR
    transfer = cv2.cvtColor(transfer.astype("uint8"),cv2.COLOR_LAB2BGR)
    
    return transfer

在此特定代码中:

    # process lab computation
    l = (lStdSrc / lStdTar) * l
    a = (aStdSrc / aStdTar) * a
    b = (bStdSrc / bStdTar) * b

获取源的标准偏差,因此,当我们将源和目标图像组合在一起时,由于实验室都将为0,因此它也将变为纯图像。

我该如何解决?当源图像不是带颜色的普通图像时,它可以工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)