imread函数读取图片深度位默认将uint16转为uint8类型并向下取整

该博客介绍了如何使用OpenCV和skimage库将16位深度的图像转换为8位灰度图像。通过示例代码展示了读取图像、调整图像值范围以及应用灰度转换的过程,揭示了当不设置imread函数的flag参数时,图像会自动向下取整转换为uint8格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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位,并且转换是向下取整的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值