cv2.IMREAD\u灰度如何将16位图像转换为8位(OpenCV python)?

2024-09-09 21:46:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用OpenCV导入python中的图像

import cv2
img = cv2.imread(img, cv2.IMREAD_GRAYSCALE)

图像为16位.png.tif,并通过cv2.IMREAD_GRAYSCALE转换为8位(如预期)。我很高兴OpenCV转换了我的图像。我知道如果我想要16位图像,我可以使用cv2.IMREAD_UNCHANGED

我只想知道OpenCV是如何将我的图像从16位转换为8位的。例如,通过典型的归一化,或以可能使像素饱和的其他方式?对于我的下游问题,更重要的是保留一般范围

我已经查看了OpenCV文档,找不到对此的解释。我找不到类似的问题

编辑:我的图像是单通道的


Tags: 文档图像importimgpng方式像素cv2
1条回答
网友
1楼 · 发布于 2024-09-09 21:46:39

uint 16图像(或16位图像)使用0到2^16-1的值,而uint 8图像(或8位图像)仅使用0到2^8-1的范围。 如果您只是将原始值强制转换为uint8,饱和将破坏大量信息。 这表现为质量下降。 这是由于钻头深度造成的


“位深度”确定相对于某些值范围可以进行的最小更改。如果我们的比例是从纯黑色到纯白色的亮度,那么我们从2位数字中获得的4个值将包括:黑色、深色中间调、浅色中间调和白色。这是一个相当粗糙的比例,对照片来说不是很有用。但如果我们有足够的比特数,我们就有足够的灰度值来形成从黑色到白色的完美平滑渐变

下面是一个比较不同位深度的黑白渐变的示例。此处嵌入的图像只是一个示例,单击此处可查看JPEG2000格式的全分辨率图像,其位深度高达14位。根据显示器的质量,您可能只能显示8-10位的差异


View this picture for a better understanding


所有软件设计都使用并实现相同的过程

相关问题 更多 >