我有一系列图像或实时视频,我想检查图像是否较暗或较亮,然后使用gamma校正(即图像^gamma)调整亮度。gamma=1不执行任何操作且小于1的gamma值,则图像变亮,大于1则图像变暗。我必须为不同类型的图像或视频提供gamma值手册
代码如下
lookUpTable = np.empty((1,256), np.uint8)
for i in range(256):
lookUpTable[0,i] = np.clip(pow(i / 255.0, gamma) * 255.0, 0, 255)
res = cv2.LUT(image, lookUpTable)
我想在检查图像时自动查找gamma值。我试着用直方图来找出亮度的伽马值,但似乎不太好
整个代码如下
histr = cv2.calcHist([image],[0],None,[256],[0,256])
totalPixels = image.shape[0]*image.shape[1]
maxInd = np.argmax(histr)
maxVal = histr[maxInd]
indP= int(0 if maxInd-5 < 0 else maxInd-5)
indexN = int(maxVal+5)
percentAtDark = (maxVal / totalPixels )*100
darkSum = np.sum(histr[indP:indexN])
percentDark = (darkSum / totalPixels )*100
if (percentDark > dartThreshold) and (maxInd < 127):
gammaList = np.arange(0.01,0.9,0.02)
gamma=gammaList[maxInd]
else:
gamma = 1
lookUpTable = np.empty((1,256), np.uint8)
for i in range(256):
lookUpTable[0,i] = np.clip(pow(i / 255.0, gamma) * 255.0, 0, 255)
res = cv2.LUT(image, lookUpTable)
dartThreshold可以设置为60或70
对于gamma校正,您可以查看this page的末尾
有没有人能在这段代码中提出更好的方法或改进?欢迎提出任何建议
在没有得到答案后,我试着找些东西分享。也许我没能把问题问清楚。我用下面的方法计算伽马
并将其应用于原始BGR图像
如果我们将
mid = 0.5
更改为mid = 1
,伽马值更改为0.1
,即mid = 0.5
如果我们得到0.69
,那么mid = 1
我们将得到gamma = 0.59
欢迎评论
相关问题 更多 >
编程相关推荐