【发布时间】:2020-08-20 03:07:49
【问题描述】:
我是一名编码初学者,我找到了用于调整图像白平衡的代码。代码有效,颜色正在改变。 实际上,我拍摄的所有图像的白平衡都有问题,我想用一个简单的代码来调整它。我使用的代码似乎效果最好(我尝试了在互联网上找到的不同代码)。 问题是河流区域在改造后变成了红色。我不知道这是因为白平衡还是因为我的颜色转换错误。 谁能帮帮我。
这是我使用的代码
import cv2 as cv
# import numpy as np
#
img = cv.imread("C:\\Users\\die5k\\Desktop\\NeuerOrdner\\DJI_0207.jpg")
r, g, b = cv.split(img)
r_avg = cv.mean(r)[0]
g_avg = cv.mean(g)[0]
b_avg = cv.mean(b)[0]
# Find the gain of each channel
k = (r_avg + g_avg + b_avg) / 3
kr = k / r_avg
kg = k / g_avg
kb = k / b_avg
r = cv.addWeighted(src1=r, alpha=kr, src2=0, beta=0, gamma=0)
g = cv.addWeighted(src1=g, alpha=kg, src2=0, beta=0, gamma=0)
b = cv.addWeighted(src1=b, alpha=kb, src2=0, beta=0, gamma=0)
balance_img = cv.merge([b, g, r])
balance_img = cv.cvtColor(balance_img, cv.COLOR_BGR2RGB)
cv.imwrite('result0207.jpg', balance_img)
【问题讨论】:
-
被绿叶的数量所影响?
-
这是您找到的最佳工作白平衡?其他的一定很糟糕!我不明白为什么这个乘法应该纠正白平衡,这对我来说似乎不对。但是你的颜色变化的原因很可能是你得到了超过 255 的值,这会溢出 8 位存储,因此最终是非常小的值。
-
@CrisLuengo 你有任何更好/首选的白平衡算法的链接吗?
-
@Mark:当然,唯一的故障安全方法是测量照度。有许多方法可以从图像内容中估计光照,但没有一种方法不会对某些类别的输入产生不好的结果。 This is a very simple method that works reasonably well (publication) -- 其他一切都要复杂得多。
-
@Tapsi:该方法所做的是独立拉伸每个通道的直方图。它假定在每个通道中,您都希望拥有零曝光像素和最大曝光像素。如果图片中有白色,这显然是正确的,但如果没有白色,这通常仍然成立。但当然,在某些情况下,这是不正确的。如果你的图片只有树木,那里面只有绿色,任何形式的自动白平衡都会使绿色变成白色或灰色。