import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from skimage import data, img_as_float
from skimage import exposure
import cv2
def grey_scale(image):
rows,cols = image.shape
flat_gray = image.reshape((cols * rows,)).tolist()
A = min(flat_gray)
B = max(flat_gray)
print('A = %d,B = %d' %(A,B))
output = np.uint8(255 / (B - A) * (image - A) + 0.5)###加上0.5是因为四舍五入取整数
return output
#image = cv2.imread('/home//plasma_bubble_20130929-30/20130929195902_gpi408_3_6300_180000_B1_G3.png.raw.png',cv2.IMREAD_ANYDEPTH )##通过指定 cv2.IMREAD_ANYDEPTH 读取任意深度的图片cv2.IMREAD_ANYDEPTH
image = cv2.imread('/home//plasma_bubble_20130929-30/20130929195902_gpi408_3_6300_180000_B1_G3.png.raw.png',2 )
print(image[500,201],image.dtype,image.max())
image = image/65535.0*255
print(image[500,201],image.dtype,image.max())
scale_image = grey_scale(image)
image = cv2.imread('/home//plasma_bubble_20130929-30/20130929195902_gpi408_3_6300_180000_B1_G3.png.raw.png',0)
print(image[500,201],image.dtype,image.max())
结果:
从输出结果看,imread函数不设置flag=2时(读取原深度位),自动将uint16位/32位深度图转为uint8位,并且转换是向下取整的