实验一:灰度变化
代码:
import cv2
import numpy as np
def liner_trans(org,k,b=0):
"""
灰度变化
:param img:
:param k: k>1时 实现灰度数值的拉伸,0<k<1 时 实现灰度数值的压缩,
k=-1 b=255 实现灰度数值的反转
:param b:灰度值
:return:
"""
# 计算灰度的线性变化映射表
translist=[(np.float32(x)*k+b) for x in range(256)]
print("映射表",translist)
# 需要转化为np.array
transTable=np.array(translist)
# 将查出[0,255]的灰度值进行调整,并指定数据类型为uint8
transTable[transTable > 255] = 255
transTable[transTable < 0] = 0
transTable = np.round(transTable).astype(np.uint8)
# 使用openCV的look up table 修改图片的灰度值
return cv2.LUT(org,transTable)
if __name__ == '__main__':
im=cv2.imread('data/mok.png')
cv2.imshow('org',im)
# 反转
# img=liner_trans(im,-1,255)
# cv2.imshow("invsion",img)
# 灰度拉伸
# img = liner_trans(im, 1.2)
# cv2.imshow("graystretch", img)
# 灰度压缩
img = liner_trans(im, 0.8)
cv2.imshow("graycompress", img)
cv2.waitKey()
cv2.destroyAllWindows()
运行:
1.1 灰度反转
# 反转 img=liner_trans(im,-1,255) cv2.imshow("invsion",img)
1.2 灰度拉伸
# 灰度拉伸 img = liner_trans(im, 1.2) cv2.imshow("graystretch", img)
1.3 灰度压缩
# 灰度压缩 img = liner_trans(im, 0.8) cv2.imshow("graycompress", img)
1.4 gamma矫正
代码:
def gamma_tarns(img,gamma):
"""
伽马矫正
:param img:
:param gamma: 伽马值
:return:
"""
#先归一化到1 做伽马计算 再还原到[0,255]
gammaList=[np.power(x/255.0,gamma)*255.0 for x in range(256)]
#将数据转换为np.array 并且指定数据类型为uint8
gammaTable=np.round(np.array(gammaList).astype(np.uint8))
print(gammaTable)
# 使用openCV 的look up table函数修改图像的灰度值
return cv2.LUT(img,gammaTable)
1.4.1 使用伽马值为0.5的变化 实现对暗部的压缩 亮部的拉伸
1.4.2 使用伽马值为2的变化 实现对亮部的压缩 暗部的拉伸