【问题标题】:How to determine if an image is higher/lower in brightness/saturation?如何确定图像的亮度/饱和度是否更高/更低?
【发布时间】:2019-11-27 12:10:07
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

这是高亮度低饱和度的Lenna:

这是低亮度高饱和度的 Lenna:

一些代码 sn-p 使用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()

而且,这就是输出:

现在,检查图像的代表性(子)集,并根据实际图像分类的饱和度和亮度平均值推断出适当的阈值。

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多