Lak*_*nan 18 opencv image-processing vision computer-vision
我一直试图在Opencv中获得图像亮度,到目前为止我已经使用了calcHist并考虑了直方图值的平均值.但是,我觉得这不准确,因为它实际上并不确定图像的亮度.我在图像的灰度版本上执行了calcHist,并试图区分从明亮图像获得的avergae值而不是中等值的avergae值.到目前为止我还没有成功.你能帮我解决一下可以通过OpenCv实现的方法或算法来估算图像的亮度吗?提前致谢.
Ann*_*ova 18
我想,HSV颜色模型在你的问题中是有用的,其中通道V是值:
"值是颜色的亮度,随颜色饱和度而变化.范围从0到100%.当值为'0'时,颜色空间将完全变黑.随着值的增加,颜色空间亮度增加显示各种颜色."
因此,使用OpenCV方法cvCvtColor(const CvArr*src,CvArr*dst,int code)将图像从一个颜色空间转换为另一个颜色空间.在你的情况下代码= CV_BGR2HSV.然后计算第三个通道V的直方图.
Ale*_*oss 12
我更喜欢瓦伦丁的答案,但对于确定平均每像素亮度的“另一种”方法,您可以使用numpy几何平均值而不是算术平均值。对我来说它有更好的结果。
from numpy.linalg import norm
def brightness(img):
if len(img.shape) == 3:
# Colored RGB or BGR (*Do Not* use HSV images with this function)
# create brightness with euclidean norm
return np.average(norm(img, axis=2)) / np.sqrt(3)
else:
# Grayscale
return np.average(img)
Run Code Online (Sandbox Code Playgroud)
我正要问同样的问题,但后来发现,类似的问题没有得到满意的答案.我在SO上找到的所有答案都涉及人类对单像素RGB与HSV的观察.
根据我的观察,图像的主观亮度也很大程度上取决于图案.白天,黑暗天空中的恒星看起来可能比多云天空更亮,而第一图像的平均像素值将小得多.
我使用的图像是由显微镜产生的灰度细胞图像.形式差异很大.有时它们是非常黑的背景上的小亮点,有时在不那么黑的背景下不那么明亮的较大区域.
我的方法是:
比率2/3也可以增加到3/4(这减小了被视为亮的像素范围).
该方法非常有效,因为具有相同滴定的不同细胞模式产生相似的亮度.
PS:我实际想问的是,在OpenCV或SimpleCV中是否存在类似的计算功能.非常感谢任何评论!
| 归档时间: |
|
| 查看次数: |
22148 次 |
| 最近记录: |