代码
import numpy as np
import cv2
import matplotlib.pyplot as plt# 定义限行灰度变化函数
# k>1时实现灰度数值的拉伸
# 0
# k=-1 b=255实现灰度反转
def liner_trans(img, k, b=0):# 计算灰度限行变化的映射表trans_list = [(np.float32(x) * k + b) for x in range(256)]# 转换为nparary类型trans_table = np.array(trans_list)# 处理超出[0,255]取值范围的进行处理trans_table[trans_table > 255] = 255trans_table[trans_table < 0] = 0trans_table = np.round(trans_table).astype(np.uint8)# 使用OpenCV的look up table函数修改图像的灰度值return cv2.LUT(img, trans_table)if __name__ == '__main__':im = cv2.imread('data/lena.jpg', 0)cv2.imshow('im', im)# 反转im_inversion = liner_trans(im, -1, 255)cv2.imshow("inversion", im_inversion)# 灰度压缩im_compress = liner_trans(im, 0.5)cv2.imshow('im_compress', im_compress)# 灰度拉伸im_stretch = liner_trans(im, 1.2)cv2.imshow('grayStretch', im_stretch)cv2.waitKey()cv2.destroyAllWindows()
实现效果
