如何确定图像的亮度/饱和度较高/较低?

时间:2019-11-27 12:10:07

标签: python opencv image-processing imageview python-imaging-library

我使用Python,并且有一个数据集,其中包含一些图像,并且练习中显示的内容如下:

  • 如果图像的亮度较高而饱和度较低->图片1的Lind
  • 如果图像亮度较低而饱和度较高->图像类型2

现在,如何确定图像的亮度/饱和度是较高/较低?

1 个答案:

答案 0 :(得分:2)

一个简单的想法是计算HSV color space中的饱和度和值(亮度)通道的均值。然后,只需为两个值设置一些阈值即可区分这两个类。

这里的Lenna具有高亮度和低饱和度:

High brightness, low saturation

这里的Lenna具有低亮度和高饱和度:

Low brightness, high saturation

一些代码段可以使用OpenCV来完成上述任务:

import cv2

# Read images
img_hv_ls = cv2.imread('Lenna_high_brightness_low_saturation.png')
img_lv_hs = cv2.imread('Lenna_low_brightness_high_saturation.png')

# Calculate means in HSV color space
mean_hv_ls = cv2.mean(cv2.cvtColor(img_hv_ls, cv2.COLOR_BGR2HSV))
mean_lv_hs = cv2.mean(cv2.cvtColor(img_lv_hs, cv2.COLOR_BGR2HSV))

# Put information on images
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(img_hv_ls, 'Mean brightness: ' + '{:.4f}'.format(mean_hv_ls[2]/255), (10, 30), font, 1, (0, 0, 0), 1)
cv2.putText(img_hv_ls, 'Mean saturation: ' + '{:.4f}'.format(mean_hv_ls[1]/255), (10, 60), font, 1, (0, 0, 0), 1)
cv2.putText(img_lv_hs, 'Mean brightness: ' + '{:.4f}'.format(mean_lv_hs[2]/255), (10, 30), font, 1, (255, 255, 255), 1)
cv2.putText(img_lv_hs, 'Mean saturation: ' + '{:.4f}'.format(mean_lv_hs[1]/255), (10, 60), font, 1, (255, 255, 255), 1)

cv2.imshow('High brightness, low saturation', img_hv_ls)
cv2.imshow('Low brightness, high saturation', img_lv_hs)
cv2.waitKey(0)
cv2.destroyAllWindows()

那将是输出:

Result: High brightness, low saturation

Result: Low brightness, high saturation

现在,检查图像的代表性(子)集,并从饱和度和亮度方法中得出适当的阈值,以进行实际的图像分类。

希望有帮助!