8

我正在科学地处理来自显微镜的图像,其中 3 个 RGB 通道中的每一个都被编码为 uint16 (0-65536)。目前我使用 OpenCV2 和 NumPy 处理图像,并使用标志“cv2.IMREAD_UNCHANGED”读取一切正常,我可以对图像做一些工作并将其返回到 uint16,

img = cv2.imread('dummy.tif',cv2.IMREAD_UNCHANGED )
#do some work here
img = img.astype(numpy.uint16)
cv2.imwrite('processed.tif',img )

但是,到目前为止,我似乎找不到任何方法将处理后的图像再次保存为 16 位 RGB。使用 cv2.imwrite 命令只需将图像转换为 uint8,从而将所有内容变为白色(即,所有内容都被截断为 255,uint8 通道的最大值)。

知道如何进行吗?

4

2 回答 2

2

OpenCV 确实支持写入 16 位 TIFF 图像。

确保您使用的是当前版本 (>= 2.2)。

在使用 OpenCV 保存之前,代码中的 img 可能会发生截断。

于 2013-08-01T12:48:52.197 回答
1

如果将 numpy.uint16 替换为 cv2.CV_16U 可能会有所帮助。在某些示例中,参数作为字符串传入,例如“uint16”。

抱歉,声誉太低,无法发表评论。

于 2013-08-01T11:55:02.467 回答