问题描述
我使用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 (将#修改为@)