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

有什么想法吗?

1 个评论
衡量亮度的标准将是V通道的平均值
python
image
opencv
image-processing
filtering
Da Nio
Da Nio
发布于 2019-07-19
3 个回答
Mark Setchell
Mark Setchell
发布于 2020-09-21
已采纳
0 人赞同

不知道你说的是什么意思"亮度值"的,但不管你是什么意思,它都是存储在价值的通道(即第三通道)。Hue, Saturation and 价值你已经计算好的图像。

因此,如果你想为整个图像获得一个单一的、平均的亮度数字,你可以使用。

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

如果你想为图像中最亮的地方提供一个单一的、峰值的亮度数字。

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

而如果你想要一个灰度的"地图"在图像的每个点上的亮度,只需显示或保存第三通道。

cv2.imwrite('brightness.png',hsv[...,2])
    
我想迭代每个像素并提取亮度值,然后做一个平均和(所有亮度值)/nPixels。
@DaNio 所以,你想要我给的第一行代码...hsv[...,2].mean()
Value corresponds strongly to brightness, but it is easy to see that with two HSV colours with the same H & V that changing the Saturation causes the brightness to change. And in fact changing Hue alone can impact brightness. It's probably easiest to convert to a grayscale image with cv2.COLOR_BGR2GRAY and check the brightness of that pixel.
Prachi Vaishnav
Prachi Vaishnav
发布于 2020-09-21
0 人赞同

在HSV中,"值 "是颜色的亮度,随颜色饱和度的变化而变化。它的范围从0到100%。当值为'0'时,色彩空间将是完全黑色的。随着数值的增加,色彩空间的亮度提高,显示出各种颜色。"

So use OpenCV method:

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

将图像从一个颜色空间转换为另一个颜色空间。你可以使用。

code = CV_BGR2HSV

然后计算第三个通道V的直方图,也就是亮度。

也许它可以帮助你!

Dhanashree Desai
Dhanashree Desai
发布于 2020-09-21
0 人赞同

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

import numpy as np
import cv2
img = cv2.imread(img_path)
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)