一背景
光强度的评价通常涉及对光源发出的光的量进行测量和描述。这种评价可以通过多种方式进行,但最常见的是使用光强单位“坎德拉”(candela,cd)来表示。坎德拉是国际单位制(SI)中光强度的单位,它描述了一个特定方向上光源的强度。
光强度的范围可以从非常微弱的光源(如某些类型的生物发光)到非常强烈的光源(如高强度灯或激光)。在日常生活中,我们会遇到各种各样的光强度水平,从星光(大约为1坎德拉每平方米)到室内照明(几百到几千坎德拉每平方米)再到直射阳光(大约为100,000坎德拉每平方米)。
然而,人类视觉系统对光强度的感知并不是线性的,而是对数的。这意味着,尽管两个光源的光强度可能相差很大,但人眼感知到的亮度可能只相差一点点。这就是为什么我们需要使用主观亮度这个概念,它反映了人眼感知到的光强度,而不是实际的物理强度。
主观亮度是人眼对光强度的感知,它与实际的光强度(坎德拉)之间存在对数关系。这种关系意味着,即使光强度增加了很多倍,人眼感知到的亮度可能只会略微增加。这种现象是由于人眼的亮度适应机制,它允许我们在不同光照条件下保持视觉的稳定性和舒适性。亮度适应使我们能够在从昏暗的房间走到明亮的户外环境中时,视觉系统能够调整并适应新的光照水平。
为此编写程序查看图像任意一点亮度变化。
二代码
修改图片路径,运行后,鼠标点击图像上任意位置,显示图像亮度。亮度测量一般转换为灰度图进行测量。
import cv2
import matplotlib.pyplot as plt
import numpy as np# 加载图片
image = cv2.imread('1.png')# 转换图像为灰度图
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 转换图像数据为浮点数类型
image_gray = np.float32(image_gray)def onclick(event):# 获取鼠标点击的坐标x = int(event.xdata)y = int(event.ydata)# 计算亮度brightness = image_gray[y, x]print(f'亮度: {brightness}')# 创建一个新的图像窗口
fig, ax = plt.subplots()# 显示图像
ax.imshow(image_gray, cmap='gray')# 连接鼠标点击事件到我们的处理函数
cid = fig.canvas.mpl_connect('button_press_event', onclick)# 显示窗口
plt.show()