机器学习第3章第5节 : 调整图像亮度
注意事项 : 参见这里
原理
将像素值减小,那么亮度就会减小,全部色彩变暗;
将像素值加大,那么亮度就会增加,全部色彩变亮;
思路
获取图像大小 : 通过图像矩阵的shape属性获取图像的大小,shape返回tuple元组,元组的第一个元素为高度,第二个元素为宽度,点三个元素为像素值 [B,G,R] .
更改元素的像素值
代码
#!/user/bin/env python
# -*- coding: utf-8 -*-
"""
Adjust brightness
调整图像亮度
"""
import cv2
fn = 'img/test1.jpg'
if __name__ == '__main__':
print('loading %s ...' %fn)
print(u'处理中....')
status = 'dark'
if status == 'light':
value = 1.2
elif status == 'dark' :
value = 0.2
else:
value = 1
img = cv2.imread(fn)
#第二维度长度
w = img.shape[1]
#第一维度长度
h = img.shape[0]
ii = 0
#将全部色彩变暗
for xi in range(0,w):
for xj in range(0,h):
#将像素值整体改变
img[xj,xi,0] = int(img[xj,xi,0] * value)
img[xj,xi,1] = int(img[xj,xi,1] * value)
img[xj,xi,2] = int(img[xj,xi,2] * value)
#显示进度条
if xi % 10 == 0:
print('当前状态:',status,'当前进度:' , round(xi * 100 / w) ,'%')
cv2.namedWindow('img')
cv2.imshow('img' + status,img)
cv2.waitKey()
cv2.destroyAllWindows()
运行结果
原图
图像变暗
图像变亮
笔记
cv2.imread()
这个代码是cv2内置的图像的读取函数.
round(floatNum)
返回浮点数floatNum的四舍五入值,使用的原因是xi * 100 / w
会造成小数的产生,打印出来很难看.