如何计算图像的对比度?

Fra*_*olo 2 python opencv image-processing

假设我有一个opencv BGR图像img,如何计算该图像的对比度?

fmw*_*w42 8

以下是对比度的一种度量:迈克尔逊对比度以及如何在 Python/OpenCV/Numpy 中计算它。低对比度接近于零,高对比度接近于1。使用 YUV 或 YCbCr 中的 Y(强度)通道,或者使用 LAB 中的 L 通道,甚至只是将图像转换为灰度并使用它。

输入:

在此输入图像描述

import cv2
import numpy as np

# load image as YUV (or YCbCR) and select Y (intensity)
# or convert to grayscale, which should be the same.
# Alternately, use L (luminance) from LAB.
img = cv2.imread("barn.jpg")
Y = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)[:,:,0]

# compute min and max of Y
min = np.min(Y)
max = np.max(Y)

# compute contrast
contrast = (max-min)/(max+min)
print(min,max,contrast)
Run Code Online (Sandbox Code Playgroud)
返回:

0 255 1.0

对比度将介于 0 和 1 之间。


Fra*_*olo 7

对比度的一种定义是RMS Contrast,它可以计算如下:

首先,将BGR图像转换img为灰度:

img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)

最后,计算灰度图像像素强度的标准偏差:

contrast = img_grey.std()
Run Code Online (Sandbox Code Playgroud)

  • RMS 对比度并不是唯一的对比度定义。我发现韦伯和迈克尔逊更为常见。 (2认同)