从HSV获取亮度值-Python

时间:2019-07-19 14:01:04

标签: python image opencv image-processing filtering

如何确定照片的亮度值? 这是我的代码,我不明白如何确定它:

def rgb2hsv(img_path):
    img = cv2.imread(img_path)
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    return hsv

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

不确定图像的“亮度值” 是什么意思,但是无论您是什么意思,它都存储在图像的 Value 通道(即第3通道)中您已经计算出的色相,饱和度和值图像。

因此,如果您想要整个图像的单个平均亮度值,则可以使用:

hsv[...,2].mean()

如果您要为图像中最亮的点设置一个峰值亮度数字:

hsv[...,2].max()

如果要在图像的每个点上使用灰度“ map” 亮度,只需显示或保存第三个通道:

cv2.imwrite('brightness.png',hsv[...,2])

答案 1 :(得分:0)

在HSV中,“值”是颜色的亮度,并随颜色饱和度而变化。范围是0到100%。值为“ 0”时,颜色空间将完全为黑色。随着值的增加,颜色空间的亮度会提高并显示各种颜色。“

因此使用OpenCV方法:

library(tidyverse)
tq84n2 <- function(template, vec) {
     crossing(template, grp = vec) %>% 
         unite(template, template, grp, remove = FALSE) %>%
          group_by(grp) %>%
          summarise(template = str_c(template, collapse=" ")) %>%
          pull(template)
  }
tq84n2(v1, 1:2)
#[1] "bar_1 baz_1 foo_1" "bar_2 baz_2 foo_2"

将图像从一种颜色空间转换为另一种颜色空间。您可以使用:

cvCvtColor(const CvArr* src, CvArr* dst, int code) 

然后计算第三通道V的直方图,即亮度。

可能对您有帮助!

答案 2 :(得分:0)

如果您需要图像中最亮的像素,请使用以下代码:

import numpy as np
import cv2
img = cv2.imread(img_path)
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(img_hsv)
bright_pixel = np.amax(v)
print(bright_pixel)
# bright_pixel will give max illumination value in the image