我输入的一张光线很暗的图片,但是按照你的代码输出来的图像怎么全是一片黄色的?
时间: 2024-02-13 22:02:54 浏览: 13
如果你的输出图像全部为一片黄色,可能是因为你输入的图像本身就很暗,导致 Retinex 算法增强后的图像看起来比较亮黄。你可以尝试调整 Retinex 算法中的参数,例如 sigma 值列表和归一化系数,以适应不同的图像。
另外,你可以尝试使用 OpenCV 的 `equalizeHist()` 函数来增强图像的对比度。这个函数可以将图像的直方图均衡化,从而增强图像的细节和对比度。示例代码如下:
```python
import cv2
import numpy as np
def retinex(img, sigma_list):
retinex_output = np.zeros_like(img, dtype=float)
img = np.float64(img)
for sigma in sigma_list:
img_blur = cv2.GaussianBlur(img, (0,0), sigma)
img_log = np.log10(img) - np.log10(img_blur)
retinex_output += img_log
retinex_output = retinex_output / len(sigma_list)
retinex_output = np.exp(retinex_output)
return retinex_output
# 读取图片
img = cv2.imread("dark_image.jpg", cv2.IMREAD_GRAYSCALE)
# 设置 sigma 值列表
sigma_list = [15, 80, 250]
# 调用 Retinex 函数
output = retinex(img, sigma_list)
# 对输出图像进行直方图均衡化
output = cv2.equalizeHist(output.astype('uint8'))
# 显示原图和增强后的图像
cv2.imshow("Original", img)
cv2.imshow("Retinex", output)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个版本的代码中,我将输入图像的数据类型改为了灰度图像,以便使用 `equalizeHist()` 函数进行直方图均衡化。在调用 `retinex()` 函数后,我将输出图像的数据类型改回了浮点型,并在 `equalizeHist()` 函数之前进行了归一化操作。最后,使用 OpenCV 的 `imshow()` 函数显示原始图像和增强后的图像。如果你的图像非常暗,你可以尝试增加 `sigma_list` 中的值或调整归一化系数以获得更好的结果。