因此,我尝试通过应用对数变换来增强这张图像original image有明亮的白色的区域变成了增强图像上的蓝色。enhanced image
path = '...JPG'
image = cv2.imread(path)
c = 255 / np.log(1 + np.max(image))
log_image = c * (np.log(image + 1))
# Specify the data type so that
# float value will be converted to int
log_image = np.array(log_image, dtype = np.uint8)
cv2.imwrite('img.JPG', log_image)
还有一个警告:运行时警告:日志中遇到被零除
我尝试使用其他类型的日志(例如log2、log10...),但仍然显示相同的结果。我尝试更改dtype = np.uint32,但导致错误。
1条答案
按热度按时间mbzjlibv1#
两个问题的原因相同
也就是这条线
image+1
是np.uint8
的数组,就像image
一样。但是如果图像中有255个分量,那么image+1
溢出。256
变为0。这导致np.log(imag+1)
在此时变为log(0)
。因此产生了错误。因此最亮的部分具有奇怪的颜色,因为它们是包含255
的部分因此,由于log无论如何都必须与float一起工作,所以在调用log之前,您只需自己转换为float即可