教程开源
本教程开源,地址:https://gitee.com/zccbbg/opencv_study
图像的亮度和对比度说明
-
亮度: 亮度是指图像中像素的整体明亮程度。在数字图像中,每个像素都有一个灰度值,表示其亮度水平。亮度越高,像素就越明亮,亮度越低,像素就越暗。调整图像的亮度通常是通过改变每个像素的灰度值或应用亮度调整滤镜来实现的。
-
对比度: 对比度描述了图像中不同区域之间的亮度差异。对比度高表示图像中明暗区域之间有明显的差异,而对比度低则表示这些差异不太明显。提高对比度可以使图像更加清晰和鲜明。对比度的调整可以通过增加暗部和亮部之间的差异来实现,例如调整图像的曲线或应用对比度调整滤镜。
调整图像对比度
获取名为"contrast"的轨迹条的当前位置,并将其除以100,以得到用户调整的对比度值。
其中image是原始图像,blank是全黑图像,0.5是权重,light和contrast分别用于亮度和对比度的调整。
def nothing(x):print(x)def adjust_contrast_demo():image = cv.imread("../images/test.jpg")'''创建一个窗口,并为它指定一个名称("input"),并使用cv.WINDOW_AUTOSIZE来指定窗口的大小自适应图像的大小。'''cv.namedWindow("input",cv.WINDOW_AUTOSIZE)'''这个轨迹条允许用户调整图像的亮度。0是轨迹条的初始值,100是轨迹条的最大值,nothing是一个回调函数,用于响应轨迹条的变化'''cv.createTrackbar("lightness","input",0,100,nothing)cv.createTrackbar("contrast","input",100,200,nothing)cv.imshow("input", image)blank = np.zeros_like(image)while True:# 获取名为"lightness"的轨迹条的当前位置,即用户调整的亮度值。light = cv.getTrackbarPos("lightness","input")# 获取名为"contrast"的轨迹条的当前位置,并将其除以100,以得到用户调整的对比度值。contrast = cv.getTrackbarPos("contrast","input")/100print("light:",light,"contrast:",contrast)# 其中image是原始图像,blank是全黑图像,0.5是权重,light和contrast分别用于亮度和对比度的调整。result=cv.addWeighted(image,contrast,blank,0.5,light)cv.imshow("result",result)c=cv.waitKey(1) # 等待1毫秒,以便捕获用户的键盘输入。会返回相应的ASCII码值。如果用户按下Esc键(ASCII码为27),则退出循环。if c==27:breakcv.destroyAllWindows()if __name__ == '__main__':adjust_contrast_demo()
图像的亮度和对比度跟随滚动条的变化而变化
调整图像亮度
使用cv.add函数将原始图像image和灰色图像blank相加,生成一个新的图像result,其中每个像素是对应位置的两个图像像素之和。这将导致原始图像中的每个像素的颜色都加了一个灰色的亮度。
def nothing(x):print(x)def adjust_lightness_demo():image = cv.imread("../images/test.jpg")cv.namedWindow("input",cv.WINDOW_AUTOSIZE)cv.createTrackbar("lightness","input",0,100,nothing)cv.imshow("input", image)blank = np.zeros_like(image)while True:pos = cv.getTrackbarPos("lightness","input") # 获取名为"lightness"的轨迹条的当前位置,即用户调整的亮度值。blank[:,:] = (pos,pos,pos) # 将全黑图像blank的所有像素值设置为(pos, pos, pos),这意味着将所有像素的颜色设置为灰色,并且灰色的亮度由轨迹条的位置pos决定。'''使用cv.add函数将原始图像image和灰色图像blank相加,生成一个新的图像result,其中每个像素是对应位置的两个图像像素之和。这将导致原始图像中的每个像素的颜色都加了一个灰色的亮度。'''result=cv.add(image,blank)cv.imshow("result",result)c=cv.waitKey(1)if c==27: # 等待1毫秒,以便捕获用户的键盘输入。会返回相应的ASCII码值。如果用户按下Esc键(ASCII码为27),则退出循环。breakcv.destroyAllWindows()if __name__ == '__main__':adjust_lightness_demo()