img_hsi = cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL)
时间: 2023-11-01 12:07:34 浏览: 43
这段代码是使用OpenCV库中的cvtColor函数将BGR格式的图像转换为HSV格式的图像。HSV是一种常用于颜色识别和分析的颜色空间,它包含三个通道:H(色相),S(饱和度)和V(亮度)。与BGR颜色空间不同,HSV颜色空间中的颜色是由其色相、饱和度和亮度三个属性组成的,更直观地表示了颜色的本质。在这里,使用cv2.COLOR_BGR2HSV_FULL参数将BGR格式的图像转换为HSV格式的图像。
相关问题
import cv2 import numpy as np def retinex(img, sigma_list): retinex = np.zeros_like(img) for sigma in sigma_list: img_blur = cv2.GaussianBlur(img, (0, 0), sigma) img_blur = np.where(img_blur == 0, 0.1, img_blur) retinex += np.log10(img) - np.log10(img_blur) retinex = retinex / len(sigma_list) retinex = np.where(retinex < 0, 0, retinex) retinex = np.where(retinex > 1, 1, retinex) return retinex def enhance_image(img): hsi = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) h, s, i = cv2.split(hsi) i_enhanced = retinex(i.astype(np.float64), [15, 80, 250]) i_enhanced = (i_enhanced * 255).astype(np.uint8) s_enhanced = cv2.equalizeHist(s) hsi_enhanced = cv2.merge([h, s_enhanced, i_enhanced]) enhanced_img = cv2.cvtColor(hsi_enhanced, cv2.COLOR_HSV2BGR) return enhanced_img img = cv2.imread('low_illumination_1.png') enhanced_img = enhance_image(img) cv2.imshow('Enhanced Image', enhanced_img) cv2.waitKey(0) cv2.destroyAllWindows()
这是一段基于Retinex算法对图像进行增强的Python代码。Retinex算法是一种用于图像增强的经典算法,它可以增强图像的对比度和颜色鲜艳度,同时可以保留图像的细节信息。该算法的基本思想是将图像分解为多个尺度的高斯模糊图像,然后通过计算不同尺度的高斯模糊图像与原始图像之间的差异来获得图像的反射性和色彩性信息。在这段代码中,首先将输入图像转换为HSI颜色空间,然后对亮度通道进行Retinex增强处理,对饱和度通道进行直方图均衡化处理,最后将三个通道重新组合成BGR颜色空间的图像输出。
修改代码import colorsys from PIL import Image sharp_image = Image.open("red1.jpg") hsi_image = sharp_image.convert("HSV") pixels = hsi_image.load() for i in range(hsi_image.size[0]): for j in range(hsi_image.size[1]): h, s, v = pixels[i, j] s = int(s* 1.5+0.5 ) v = int(v* 1.5+0.5) pixels[i, j] = (h, s, v) rgb_image = hsi_image.convert("RGB") rgb_image.save("red2.jpg")使其不会降低图片清晰度
为了避免降低图像清晰度,可以使用浮点数计算来对饱和度和亮度进行增强,然后使用更高的精度(例如16位或32位)进行图像转换和保存。修改后的代码如下:
```python
import colorsys
from PIL import Image
sharp_image = Image.open("red1.jpg")
hsi_image = sharp_image.convert("HSV")
pixels = hsi_image.load()
# 饱和度和亮度增强
for i in range(hsi_image.size[0]):
for j in range(hsi_image.size[1]):
h, s, v = pixels[i, j]
s = int(s * 1.5 + 0.5)
v = int(v * 1.5 + 0.5)
if s > 255:
s = 255
if v > 255:
v = 255
pixels[i, j] = (h, s, v)
# 转换回RGB颜色空间并保存
rgb_image = hsi_image.convert("RGB")
rgb_image.save("red2.jpg", "TIFF", compression=None, bits=16)
```
其中,增强饱和度和亮度的代码使用了浮点数计算,并且对计算结果进行了范围限制,确保输出不会超出0到255的范围。同时,在图像转换和保存时,使用了更高精度的TIFF格式,并且关闭了压缩选项,以避免对图像质量的影响。